利用SN.exe和AssemblyInfo.cs把dll放到全局程序集缓存

来源:互联网 发布:易语言写免费网络验证 编辑:程序博客网 时间:2024/05/19 23:12

 写在前面:GAC全局程序集缓存是一个很酷的东西,对于版本非常稳定的exe或dll是很有用的,您可以把可执行文件放到全局程序集中,调用时就像利用.NET自带的程序集一样,如调用System.Data.dll一样,不需要把dll引用到本地。下面就介绍怎样把dll放到GAC中。

SN.exe
用来生成一个强名称密钥文件,打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd,输入sn -k MyKey.snk,得到的文件在命令提示符的当前文件夹下,如C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0中。

AssemblyInfo.cs
新建一个项目时,会生成一个AssemblyInfo.cs文件,可以在此文件中增加如下的内容

[assembly: AssemblyKeyFile("MyKey.snk")]


MyKey.snk被直接放在项目下面。
内容说明:
类型名:
System.Reflection.AssemblyKeyFileAttribute
Attribute声明:
[AttributeUsage(AttributeTargets.Assembly)]
public sealed class AssemblyKeyFileAttribute : Attribute
功能:
包含了公钥(如果使用延迟签名)或者既包含公钥也包含私钥的文件名。此公钥和私钥将作为参数传递至此属性的构造函数。文件名称与输出文件路径(.exe 或 .dll)相关,与源文件路径无关。

直接在项目中设置
在IDE中选项项目,右键属性,找到签名选项卡,在“为程序集签名”上面找勾,然后选择密钥文件。

把dll放到GAC中
生成dll后,用gacutil /i myDll.dll放进Global Assembly Cach。
Dll安装在GAC之后,所有的应用程序集都可以共享这个程序集,发布新dll之后所有程序都可以得到及时的修改。最后GAC还可以提供不同版本的程序集管理。不过GAC部署起来的确比一般简单复制要麻烦。

原创粉丝点击