一、原因
通常来说,类库作为应用程序的一部分,在程序运行之前就应该被引用到应用程序之中,并且其dll文件也应该与应用程序的.exe文件位于同一目录之下。当dll与.exe不在同一目录下时,就会引发“无法找到指定程序集”的错误。类库不像即插即用的插件,它是应用程序不可拆卸的一部分。
二、一般解决方案
在说完原因之后,其实解决方案也就已经出来了——将dll于.exe置于同一目录下即可。
当然,这只是最为简单的一种解决方法,而它所留下的后遗症也是显而易见的:如果你有多个不同的应用程序引用了同一个类库时,就将不得不在每一个应用复制一个dll,这实在是有些麻烦且不够优雅。这种方案又可以有几种实现方法。
方法1:在指定引用的属性中选择“复制到本地”一栏,并将其设置为true
方法2:在.exe目录下新建一个文件夹,并使其名称与类库名称一致,然后将类库置于此文件夹下
方法3:打开app.config文件,并添加以下代码:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="文件名"></probing>
</assemblyBinding>
</runtime>
只要将“文件名”替换为dll的目录即可,但需要注意的是,存储dll的文件必须置于与.exe同一目录下,否则这个方法无效
一般解决方案虽然解决了问题,但仍不够优美,下面我将介绍另一种方法。
三、对GAC的简单应用
GAC全称是Global Assembly Cache,作用是可以存放一些公共Assembly,也就是我们常说的公共类库。这样,很多程序就可以从GAC里面取得,而不需要再把所有要用到的dll都拷贝到应用程序的执行目录下面。
使用步骤:
(1)打开“开发人员命令提示符”
(2)创建密钥:
(3)使用密钥:
(4)重新编译后将程序集添加到缓存(这一步骤需要以管理员权限打开开发人员命令提示符):
(5)将目标添加目标引用并将“复制到本地”设置为false
以上就是解决方法
然后是将程序集移出缓存的方法: