【问题标题】:Visual Studio 2010 is Eating My DLLs! - referenced third party dlls missing after buildVisual Studio 2010 正在吃掉我的 DLL! - 构建后缺少引用的第三方 dll
【发布时间】:2010-07-14 14:41:19
【问题描述】:

请帮我把头发拉出来:

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

  • 通用库
  • MyApp.NHibernate
  • MyApp.Library
  • MyApp.WebUI

MyApp.WebUI 是主要的启动 MVC Web 项目,并引用了 GenericLibraryMyApp.NHibernateMyApp .图书馆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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多