2015-11-14 52 views
1

我遇到了MSBuild的依赖关系问题。我在解决方案中为Microsoft.Tpl.Dataflow添加了一个NuGet包到项目。这会导致解决方案中引用第一个项目的网站项目的构建失败。获得正确的运行时版本似乎存在问题。Msbuild无法通过间接引用System.Runtime构建网站项目

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

C:\ SRC \ MyWebsite.metaproj:警告MSB3268:主要参考 “C:\ SRC \项目\ ReferencedProject \ BIN \调试\ ReferencedProject.dll” 无法得到解决,因为它有一个间接的依赖于 框架程序集“System.Runtime,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a”,这在目前的目标框架中无法解析。 ” .NETFramework,版本= V4.5" 。要解决 此问题,请删除引用 “C:\ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll” 或将您的应用程序重定向到包含 “System.Runtime,Version = 4.0的框架版本。 0.0,文化=中立, PublicKeyToken = b03f5f7f11d50a3a“。

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

我已经试过

  • 更改为网站到4.0的目标框架(这是目前4.5)。
  • 添加集的引用System.Runtime.dll版本4.0.0.0

我仍然不能得到它来构建。我怎样才能解决这个问题?

回答

2

原来aspnet_compiler.exe(这是由MSBuild的称呼)在

C没有寻找在门面目录库:\程序文件(x86)\参考大会\微软\ Framework.NETFramework \ v4.5 \ Facade

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

我发现这从this blog post.正如在那里提到的,为了解决这个问题,我将DLL从Facade目录复制到v4.5目录中,并且一切正常。

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

+0

感谢您分享。 – frattaro

+0

这也发生在我们.net 4.7。我想补充一点,这只发生在我们在构建服务器上使用msbuild命令行时,而不是在visual studio中。虽然这个解决方案也可以工作,因为4.7也有Facades目录,所以比复制系统文件要好得多,因为系统文件必须在每个构建服务器上完成。 – madamission

+0

如果有人想更深入地尝试以正确的方式进行尝试,或者验证将其报告给Microsoft,我'认为'有一个名为TargetFrameworkDirectories的基础msbuild参数缺少该路径。至于如何使用aspnet_compiler在那里得到它,我不确定,因为我不知道你是否可以传递参数。至于现在我将使用不太理想的复制文件的解决方案。 – madamission