none
程序集签名的概念问题 RRS feed

  • 问题

  • 看了好几天都似是而非,请指点:

    例如,我有一个解决方案:包括: A.exe 和 B.dll, 其中B.dll在解决方案中是以类库的形式出现的。

    我把B签名,并且编译后,用 Gacutil /i 把 B.dll 加入了的GAC.

    我的问题是:

    1. 签名前, A.exe是通过"引用“->”项目"的方式关联B.dll的,签名后,我是不是要解除以前的"项目"关联,然后通过"浏览"方式到 Windows/Assembly里面找到这个B.dll,然后引用?

    2. 我尝试这样做,但为什么我在Windows/Assembly无法把B.dll计入引用?

    3. 我怎么知道我成功的引用了签名后的dll而不是以前的私有程序集方式?

    4. 是不是一般一个公司的所有产品都只用一对密钥? 我看GAC里面微软的public token都是一样的。



    2010年2月8日 11:29

答案

  • 谢谢,不过我试了一下"对话框的.NET选项",并不能找到GAC中我的assembly.

    Google了半天,把这个问题搞清了个大概:

    1. Gac是runtime的概念,不是用于开发,所以在开发过程中不要引用gac, gac只是安装时使用,或者说是在客户机上的概念 。
    2. 开发时,只要用"引用"-》"浏览"来引用开发机上任何位置的assembly副本,这是ide就会关联这个assembly(我才是通过Assembly Name, Version, Cultur和public token关联)
    3. 用gactul.exe(开发时),或 部署工具(安装到用户机器时) 把 Assembly放入gac,这时即使你删掉机器上除gac外任何地方的那个被引用的assembly, 你的程序在运行时,也可以找到(runtime负责).

    如果有错误的地方请指正,希望对和我一样的菜鸟有帮助。
    2010年2月9日 2:11

全部回复

  • 你好!
         1,通过“添加引用”对话框的.NET选项卡来添加GAC中的程序集引用!
         2,参考1
         3,你添加哪个程序集作为引用,引用的就是哪个
         4,通常不是这样的,GAC中的public Token也不是都一样!
    周雪峰
    2010年2月8日 14:25
    版主
  • 谢谢,不过我试了一下"对话框的.NET选项",并不能找到GAC中我的assembly.

    Google了半天,把这个问题搞清了个大概:

    1. Gac是runtime的概念,不是用于开发,所以在开发过程中不要引用gac, gac只是安装时使用,或者说是在客户机上的概念 。
    2. 开发时,只要用"引用"-》"浏览"来引用开发机上任何位置的assembly副本,这是ide就会关联这个assembly(我才是通过Assembly Name, Version, Cultur和public token关联)
    3. 用gactul.exe(开发时),或 部署工具(安装到用户机器时) 把 Assembly放入gac,这时即使你删掉机器上除gac外任何地方的那个被引用的assembly, 你的程序在运行时,也可以找到(runtime负责).

    如果有错误的地方请指正,希望对和我一样的菜鸟有帮助。
    2010年2月9日 2:11