一、原因
通常來說,類庫作爲應用程序的一部分,在程序運行之前就應該被引用到應用程序之中,並且其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
以上就是解決方法
然後是將程序集移出緩存的方法: