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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章