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

时间:2015-08-22 14:54:59

标签: c# .net msbuild xunit xunit.net

我正在尝试通过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。)

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

version 1.0: 2006
version 2.0:
version 3.5: 2011

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