2010-07-14 82 views
3

請幫我拉我的頭髮了這一點:Visual Studio 2010正在吃我的DLL! - 引用第三方DLL文件丟失後建立

我有一個Visual Studio ASP.NET MVC解決方案,其中一個項目引用在這種情況下,第三方DLL,log4net。我的解決辦法樹如下:

  • GenericLibrary
  • MyApp.NHibernate
  • MyApp.Library
  • MyApp.WebUI

MyApp.WebUI是主要的初創MVC web項目,並提及GenericLibrary,MyApp.NHibernateMyApp.LibraryMyApp.NHibernate引用了所有的NHibernate位,包括log4net。

現在的問題是,當我編譯我的解決方案時,log4net dll似乎出現並從MyApp.WebUI項目的/ bin目錄中消失,因此NHibernate會以可理解的方式拋出錯誤。我在第二臺監視器上看到了一個Windows資源管理器窗口,查看Web項目的/ bin文件夾,我可以看到log4net dll在每次編譯後都會出現然後消失,它似乎按順序發生(出現,消失,重新出現,消失等)而不是隨機的。

MyApp.NHibernate項目是唯一引用log4net dll的項目,但GenericLibrary具有對NHibernate的引用,但不包含log4net。 MyApp.NHibernate引用GenericLibrary,MyApp.Library也引用GenericLibrary,但GenericLibrary獨立。

我能想到的唯一解決方案是爲我的解決方案中使用的每個外部庫/ dll(Nhibernate,log4net,Castle Windsor等)添加引用MyApp.WebUI主項目,以解決log4net問題並避免這在未來發生。但是這對我來說並不是一個很整齊/解耦的解決方案。


更新:要回答kekekela的問題,我有複製本地設置爲true兩個log4net的參考和MyApp.NHibernate項目引用本身,見下圖:

alt text http://www.dominicpettifer.co.uk/Temp/DLL-Hell-1.png


更新2: Bizzarely這個問題似乎隻影響log4net DLL。我試圖添加一個不同的第三方DLL到MyApp.NHibernate項目,NLog dll,這似乎保持不變,而log4net繼續消失並重新出現。

+0

爲什麼不使用PostBuild腳本將log4net.dll複製到項目的bin文件夾中? – 2010-07-20 14:06:36

+0

...或者如果你已經有了一個後期構建腳本,檢查它是不是造成問題! :-) – 2010-10-19 19:27:35

回答

6

我有這個相同的問題。我將項目屬性對話框中的目標框架從「.NET Framework 4 Client Profile」更改爲「.NET Framework 4」,這似乎解決了問題。以下是描述目標框架差異的msdn文章。