2015-06-11 87 views
1

我正在編寫一個包含其他庫的C#庫 - 項目。這個庫應該存儲在一個子文件夾「lib」中。從庫項目中的子文件夾引用dll文件

假設我的項目名爲mylib,其他庫稱爲extralib。比目錄如下:

lib/extralib1.dll 
lib/extralib2.dll 
... 
mylib.dll 

我現在寫了一個C#-console-應用: 我打電話從一中是指mylib.dll功能,從extralibs調用的函數。一切工作正常,當我使用一個app.config文件是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    ... 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="lib"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

但問題是,當我使用中是指mylib.dll例如MATLAB軟件對extralibs的引用不起作用。唯一的工作,當我將它們全部保存在同一個文件夾中時。這就是我不想做的事情。

所以重點是將lib添加到控制檯應用程序中的私有路徑不是一個好的解決方案!我必須將額外的庫添加到mylib.dll中的私有路徑。

你有一個想法如何做到這一點?或者,有沒有更好的方法來解決這個問題?

+0

我發現這個函數:'AppDomain.CurrentDomain.SetupInformation.PrivateBinPath =「lib」;'但我不想知道mylib.dll中首先調用哪個函數,我不想在每個函數中添加它 – morgelo

+0

你的配置文件根本沒有被使用,CLR試圖找到matlab.exe.config。爲可能使用許多其他需要修改配置文件的插件編寫配置文件是不明智的。沒有人關心這些DLL在一個目錄中,只有你。 –

回答

0

如果需要,您可以使用IL Merge將所有程序集合併到一個文件中。

- >IL Merge

+0

感謝您的回覆。該項目並不像問題中顯示的那麼簡單,我不想合併這些DLL – morgelo

0

我想,你混淆運行設計時間引用探測。您可以在設計時設置對任何位置的引用。但是在運行時,它可能需要位於不同的位置(例如,GAC或同一個bin)。此外,一些應用程序有非常具體的查找依賴關係的方法。你的探測可能無法在MatLab中工作的原因是因爲你沒有配置文件用於控制檯應用程序。

是的,有一個更好的方法來做到這一點。你需要創建你可以生活的項目結構。實時免維護。試想一下,你的解決方案樹

____Solution 
    |____MyLibProject 
    |____MyConsoleProject 
    |____Bin 

現在,設置你的項目把生成輸出到解彬。把你的「extralib」放到同一個地方。 - 你的問題解決了。你有一個可愛的包,將始終工作。

相關問題