Visual Studio 2010正在吃我的DLL! - 构建后缺少引用的第三方dll

时间:2010-07-14 14:41:19

标签: .net visual-studio visual-studio-2010 dll compilation

请帮助我把头发拉出来:

我有一个Visual Studio ASP.NET MVC解决方案,其中项目引用第三方DLL,在这种情况下为log4net。我的解决方案树如下:

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

MyApp.WebUI 是主要的启动MVC Web项目,并且引用了 GenericLibrary MyApp.NHibernate MyApp .Library MyApp.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的问题,我将log Local设置为true,用于log4net引用和MyApp.NHibernate项目引用本身,请参见下面的屏幕截图:

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


更新2: Bizzarely这个问题似乎只会影响log4net dll。我尝试在MyApp.NHibernate项目中添加一个不同的第三方dll,NLog dll,这似乎保持不变,而log4net继续消失并重新出现。

1 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。我将项目属性对话框中的目标框架从“.NET Framework 4 Client Profile”更改为“.NET Framework 4”,这似乎解决了这个问题。这是一篇msdn文章,描述了目标框架的差异。