如何确定构建程序集的 MSBuild 版本?

How to determine the version of MSBuild an assembly was built with?

我正在尝试通过 MSBuild 运行 我的第一个 xUnit.net 测试,并且我正在遵循文档 here。这是我的项目文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\xunit.runner.msbuild.2.0.0\build\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.runner.msbuild.props"
          Condition="Exists('..\packages\xunit.runner.msbuild.2.0.0\build\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.runner.msbuild.props')" />

  <!--Extra lines omitted for brevity-->

  <UsingTask AssemblyFile="xunit.runner.msbuild.dll"
             TaskName="Xunit.Runner.MSBuild.xunit"/>
  <Target Name="Test">
    <xunit Assembly="bin$(Configuration)\Core.dll"/>
  </Target>
</Project>

然而,当我 运行 MSBuild 时,它给我以下错误:

C:\Users\James\libvideo\tests\Core\Core\Core.csproj(85,5):

error MSB4127: The "xunit" task could not be instantiated from the assembly "C:\Users\James\libvideo\tests\Core\packages\xunit.runner.msbuild.2.0.0\build\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.runner.msbuild.dll".
Please verify the task assembly has been built using the same version of the Microsoft.Build.Framework assembly as the one installed on your computer and that your host application is not missing a binding redirect for Microsoft.Build.Framework.
Unable to cast object of type 'Xunit.Runner.MSBuild.xunit' to type 'Microsoft.Build.Framework.ITask'.

我已经检查过拼写是否正确,但它仍然给我这个错误。 xUnit.net 文档对此没有任何说明(或者至少从我看过的地方来看),所以我现在不知道该怎么做。它告诉我可以检查构建程序集的 MSBuild 版本,但我该怎么做?甚至需要 MSBuild 来构建程序集吗?

(MSBuild 说它是版本 14.0.23107.0,如果这很重要,我有 VS2015。)

谢谢!

MSBuild 基于任务和目标。您可以在 .csproj 中看到它的样子,通常在最后。任务对象在您使用的 MSBuild 版本中定义,位于例如 C:\Program Files (x86)\MSBuild.0\Bin.

MSBuild 的版本通常遵循 .NET 框架,如下所示:

version 1.0: 2006
version 2.0:
version 3.5: 2011

您可能错过了正确的 MSBuild 版本。或者您可以尝试使用与 ToolsVersion="14.0".

不同的版本