Visual Studio 2010正在吞噬我的DLL! - 构建后引用的第三方DLL丢失

3

请帮忙,我为此烦恼不已:

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

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

MyApp.WebUI是主要的MVC Web项目,引用GenericLibraryMyApp.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的问题,我已将log4net引用和MyApp.NHibernate项目引用的Copy Local设置为true,请参见下面的屏幕截图:

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


更新2: 奇怪的是,这个问题似乎只影响log4net dll。我尝试向MyApp.NHibernate项目中添加另一个第三方dll——NLog dll,它似乎保持不变,而log4net则继续消失和重新出现。


为什么不使用PostBuild脚本将log4net.dll复制到项目的bin文件夹中呢? - Bharath K
...或者,如果你已经有一个构建后脚本,请检查它是否导致了问题! :-) - Jason Williams
1个回答

6

我之前也遇到了这个问题。在项目属性对话框中,我将目标框架从“.NET Framework 4客户端配置文件”更改为“.NET Framework 4”,这似乎解决了问题。这里有一篇MSDN文章介绍了目标框架之间的区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接