2012-01-26 82 views
2

我得到了以下的編譯文件夾(簡體):加載庫的相對路徑?

D:\MySolution\Project1\bin\Debug 
D:\MySolution\Project2\bin\Debug 

Project1Project2一個參考,但在代碼中,我必須加載從PROJECT1一類,所以我用這個代碼的工作原理:

var project2ref = Assembly.LoadFrom(@"..\..\..\Project1\bin\Debug\Project1.dll") 
           .CreateInstance("MyNamespace.MyClass"); 

這適用於VS,但在使用我的軟件的安裝版本時會崩潰... 相對路徑的替代方法是什麼?

+1

爲什麼不在項目資源管理器中的「引用」下添加引用,從'project1'引用'project2'? –

+0

最有可能您的安裝文件夾沒有bin \ Debug子文件夾,是嗎? –

+0

Project1已經在Project2上使用了一個引用(使用一個接口),所以我不能在Project1中引用Project2(循環依賴) –

回答

7

當您構建解決方案時,您會將project1的dll放入project2的bin文件夾中。 因此,您可以通過檢索project1.dll的程序集路徑來獲取project2.dll的引用。下面的代碼將在project1中執行,並將獲得包含dll的項目的bin路徑。

System.Reflection.Assembly.GetExecutingAssembly().Location 
+1

否,因爲Project2在Project1上沒有引用!我無法添加此refenrece(請參閱我的問題的評論) –

+1

對不起,我誤解了這個問題。如果你面臨這個問題,那是因爲設計錯誤(你反正通過反射來加載project1來創建循環依賴)。最好的選擇是將你在project1中需要的代碼移動到一個單獨的項目中,並將其作爲正常的依賴項引用。 –