【发布时间】:2010-07-14 14:41:19
【问题描述】:
请帮我把头发拉出来:
我有一个 Visual Studio ASP.NET MVC 解决方案,其中一个项目引用了第三方 DLL,在本例中为 log4net。我的解决方案树如下:
- 通用库
- MyApp.NHibernate
- MyApp.Library
- MyApp.WebUI
MyApp.WebUI 是主要的启动 MVC Web 项目,并引用了 GenericLibrary、MyApp.NHibernate 和 MyApp .图书馆。 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 项目添加不同的第 3 方 dll,即 NLog dll,这似乎保持不变,而 log4net 继续消失并重新出现。
【问题讨论】:
-
为什么不使用 PostBuild 脚本将 log4net.dll 复制到项目的 bin 文件夹中?
-
...或者,如果您已经有构建后脚本,请检查它是否没有导致问题! :-)
标签: .net visual-studio visual-studio-2010 dll compilation