2010-01-03 64 views
4

我有一個解決方案,其中有3個項目。其中2個項目引用了log4net和其他幾個DLL。如何將所有引用的DLL移動到C#中的獨立文件夾?

當我創建安裝包併爲每個項目添加項目輸出時,它會將這些DLL放入主「應用程序文件夾」中。如果我將這些DLL拖到我在安裝項目中創建的獨立文件夾中,應用程序將不會運行「無法找到log4net」。我希望這些DLL引用像「bin」或任何名稱真的,只是不是他們添加混淆的主文件夾 - 我只想我的2個.exe的主文件夾。

我試着在每個項目中添加一個引用路徑來指向「bin」文件夾。然後在安裝項目中,我添加了一個名爲「bin」的輸出文件夾,並將這些DLL移動到該文件夾​​中,但仍然無效。

我錯過了什麼!我花了幾個小時的時間四處尋找弄清楚我做錯了什麼,也許這是我出生的方式!謝謝你的幫助!

回答

10

您可以使用<probing> element app.config文件中指定的融合(組裝裝載機)的私人路徑進行搜索。

這允許您指定的應用程序目錄的子路徑的路徑Fusion在嘗試查找要綁定的組件時應搜索哪些內容。一個例子(從文檔頁面所)是:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin2\subbin;bin3"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

這意味着,融合將在bin搜索,BIN2 \ subbin(但不BIN​​2,IIRC)和BIN3子目錄組件時,試圖與它們結合。

+0

偉大的工作,謝謝! – user53885 2010-01-03 21:44:55

3

我寫了一個NuGet包,叫PrettyBin爲了這個目的 它就將此一後生成目標的項目,即移動的dll到「LIB」子文件夾,並修改的app.config看看有

相關問題