【问题标题】:Msbuild fails building website project with an indirect reference to System.RuntimeMsbuild 无法通过间接引用 System.Runtime 来构建网站项目
【发布时间】:2015-11-14 21:18:51
【问题描述】:

我遇到了 MSBuild 的依赖问题。我将 Microsoft.Tpl.Dataflow 的 NuGet 包添加到我的解决方案中的项目中。这导致引用第一个项目的解决方案中的网站项目构建失败。获取正确的运行时版本似乎存在问题。

这是我在使用 MSBuild 构建解决方案时遇到的众多错误之一。

C:\src\MyWebsite.metaproj : 警告 MSB3268: 主要参考 “C:\src\projects\ReferencedProject\bin\Debug\ReferencedProject.dll” 无法解决,因为它间接依赖于 框架程序集“System.Runtime,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a" 无法在 当前目标框架。 “.NETFramework,版本=v4.5”。解决 这个问题,要么删除引用 “C:\src\projects\ReferencedProject\bin\Debug\ReferencedProject.dll” 或将您的应用程序重新定位到包含以下内容的框架版本 “System.Runtime,版本=4.0.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a"。

令人困惑的是,该解决方案在 Visual Studio 中构建良好。此外,解决方案构建中的所有其他项目——只有网站项目失败了。

我试过了

  • 将网站的目标框架更改为 4.0(当前为 4.5)。
  • 添加对 System.Runtime.dll 版本 4.0.0.0 的程序集引用

我仍然无法构建它。我该如何解决这个问题?

【问题讨论】:

    标签: c# .net msbuild visual-studio-2015 web-site-project


    【解决方案1】:

    原来 aspnet_compiler.exe(由 msbuild 调用)不会在 Facade 目录中查找库

    C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\Facade

    因此,解决方案中的网站项目将无法编译。

    我是从this blog post. 发现的

    老实说,这是一个不太理想的解决方案。

    【讨论】:

    • 感谢分享。
    • 这在 .net 4.7 中也发生在我们身上。我想补充一下,这只发生在我们在构建服务器上使用 msbuild 命令行时,而不是在 Visual Studio 中。虽然这个解决方案也有效,但由于 4.7 也有 Facades 目录,所以必须有比复制系统文件更好的方法,因为复制系统文件必须在每个构建服务器上完成。
    • 如果有人想深入研究以尝试以正确的方式进行操作,或验证以向 Microsoft 报告,我“认为”有一个名为 TargetFrameworkDirectories 的底层 msbuild 参数缺少该路径.至于如何使用 aspnet_compiler 将其放入其中,我不确定,因为我不知道您是否可以将参数传递给它。至于现在,我将使用不太理想的复制文件的解决方案。
    猜你喜欢
    • 2019-12-13
    • 2010-11-25
    • 2019-09-28
    • 2020-12-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多