C# 配置引用程式集的路徑(分離exe和dll從指定路徑呼叫)
阿新 • • 發佈:2018-12-31
問題:在開發較大的專案時,會引用很多其他專案的dll,而我們規劃將不同型別的dll放在不同的功能目錄下,此時我們通過反射動態載入時,出現System.IO.FileNotFoundException: 未能載入檔案或程式集的問題。
程式集DLL分為兩類:
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及其依賴項。