Msbuild 无法通过间接引用 System.Runtime 构建网站项目

Kri*_*per 4 .net c# msbuild vs-web-site-project visual-studio-2015

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

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

C:\src\MyWebsite.metaproj:警告 MSB3268:无法解析主要引用“C:\src\projects\ReferencedProject\bin\Debug\ReferencedProject.dll”,因为它间接依赖于框架程序集“System.dll”。运行时,版本 = 4.0.0.0,文化 = 中性,PublicKeyToken = b03f5f7f11d50a3a”,在当前目标框架中无法解决。“.NETFramework,版本 = v4.5”。要解决此问题,请删除引用“C:\src\projects\ReferencedProject\bin\Debug\ReferencedProject.dll”或将您的应用程序重定向到包含“System.Runtime, Version=4.0.0.0, Culture=中性,PublicKeyToken=b03f5f7f11d50a3a”。

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

我试过了

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

我仍然无法构建它。我怎样才能解决这个问题?

Kri*_*per 5

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

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

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

我从这篇博客文章中发现了这一点。正如那里提到的,为了解决这个问题,我将 DLL 从 Facade 目录复制到 v4.5 目录中,一切正常。

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

  • @MichaelAdamission:我*认为*这对我有用。在我的管道中,我通过了: `msbuildArgs: '/p:TargetFrameworkDirectories="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades;$(TargetFrameworkDirectories)""'` (2认同)