2011-06-26 87 views
0

我有一個名爲A的項目,位於C:\ ProjectA中。 它引用了一個名爲B.dll的dll,位於C:\ Binaries中。確定組裝位置

現在B.dll必須動態加載名爲C.DLL的第二個DLL,它位於同一個文件夾(C:\ Binaries)中。但是B怎麼能確定C的位置?

我知道AppDomain.CurrentDomain.BaseDirectory和Assembly.GetExecutingAssembly()。位置,但都會返回'C:\ ProjectA \',因爲B.dll是由A.exe加載的。

我知道顯而易見的解決方案是將所有二進制文件放在同一個文件夾中,它們將在發佈時發佈,但在開發過程中,我無法更改存儲庫的佈局,並且我希望避免硬編碼路徑。

編輯:的How do I get the path of the assembly the code is in?

回答

0

如何使用Assembly.GetCallingAssembly的B?這將返回調用當前執行方法的方法的Assembly對象。 (即B)

public void BMethod() 
{ 
    var assembly = Assembly.GetCallingAssembly(); 
    string path = assembly.Location; 
     //now use this path to load C.dll in the same folder. 

} 

this類似的堆棧溢出問題

+0

感謝吧!當我看到這個問題時,我的問題似乎是重複的:o – Muis

1

MSDN對不起重複的,你就來測試一下基礎上某種類型的現有C(或B):

Assembly assembly = Assembly.GetAssembly(yourVar.GetType()); 
//your location will be in assembly.Location 
Console.WriteLine("Location=" + assembly.Location);