C# 配置引用程序集的路徑(分離exe和dll從指定路徑調用)


問題:在開發較大的項目時,會引用很多其他項目的dll,而我們規划將不同類型的dll放在不同的功能目錄下,此時我們通過反射動態加載時,出現System.IO.FileNotFoundException: 未能加載文件或程序集的問題。

程序集DLL分為兩類:

1)全局DLL(在GAC中注冊,GAC——全局程序集緩存),有關GAC的詳細資料可以參考一下鏈接:
http://blog.csdn.net/prince_lintb/article/details/40789211

2)私有DLL,默認情況下,添加程序集引用的時候,程序集DLL會復制到可執行目錄下。
對於私有DLL,當數目眾多時,由於沒有分類,會顯得比較凌亂。在發布軟件的時候也不希望在軟件安裝目錄下看到大量的dll文件。如果能將其分類放在不同的文件夾下就再好不過了。
問題是,如何解決應用程序對DLL的查找路徑問題呢?答案是在配置文件中添加如下配置項。(app.config或者web.config,沒有就新建,添加->配置文件)

<configuration>
<runtime>
<!--xmlns是必需的特性。指定程序集綁定所需的 XML 命名空間。 使用字符串“urn: 架構-microsoft-com:asm.v1”作為值。-->
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<publisherPolicy apply="yes"/> <!--指定運行時是否使用發布者策略-->
<!--指定加載程序集時公共語言運行時搜索的子目錄, 其中privatePath是相對於*.exe.config文件的相對路徑,多個文件夾以分號分隔。-->
<probing privatePath="Common;Security"/>
</assemblyBinding>
</runtime>
</configuration>
 
其中privatePath是相對於*.exe.config文件的相對路徑,多個文件夾以分號分隔。當編譯后會在生成目錄下生成一個后綴為.exe.config的文件,就是相對這個文件的。
添加程序集DLL引用之后,將DLL的屬性“復制本地”設置為False。程序編譯過程中,會自動檢索Common和Security文件夾下的DLL及其依賴項。

注:關於xml字段和及節點含義查詢:https://msdn.microsoft.com/zh-cn/library/twy1dw1e


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM