2010-07-14 85 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文章。