.NET 创建强名称程序集

最近在工作上遇到的一个问题,如何不直接引用程序集而通过Assembly.Load()方法来加载程序集。百度了下,现在总结下解决思路以及该解决方法的一些缺陷。
    由于Assembly.Load()方法直接从全局应用程序缓存中查找要加载的dll文件,所以直接指定dll文件路径的方法是行不通的,那么这就要用到强名称程序集,创建强名称程序集过程如下:
    首先,打开Visual Studio 命令提示符,打开该dll文件所在的文件夹,该文件一般位于bin\Debug目录下;
    然后,使用sn -k MyProjectKey.keys指令创建密钥文件,创建之后,使用sn -p MyProjectKey.keys MyProjectPublicKey.PublicKey指令创建公钥文件,最后使用sn -tp MyProjectPublicKey.PublicKey查看该文件的公钥标志,公钥标志后面要用到;
    再然后,使用gucatil -i MyProject.dll方法将该dll文件加入到全局应用缓存;
    这时候,把Assembly.Load()方法中的参数改为“应用程序集名称,version=版本号,culture=区域信息(一般为netural,对英文不感冒,貌似是这么拼的- -b),PublicKeyToken=上面的公钥标志”,这时候,会发现Assembly.Load()方法成功加载!~~~
    因为项目在编译的时候,会首先在全局应用程序缓存中查找dll文件,所以这时候完全可以删除对该dll文件的引用。但这么做其实是有缺陷的,首先,该dll文件在项目修改之后重新生成,但全局应用缓存里面对应的dll文件是没有变化的;其次,卸载全局应用缓存里面的程序集比较麻烦,要通过代码来卸载,具体代码如下:
    

AppDomain ad = AppDomain.CreateDomain("MyProject",null);
    AppDomain.UnLoad(ad);

 

posted @ 2015-03-31 21:16  尋找一個證明  阅读(469)  评论(0)    收藏  举报