请帮忙,我为此烦恼不已:
我有一个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的问题,我已将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则继续消失和重新出现。