我试图建立一个C#项目,该项目在构建时将运行xUnit测试,因此可以在持续集成中使用它们。我有一个常规项目,一个使用xUnit的类库测试项目以及我的测试运行器项目。从我读过的所有内容来看,似乎应该可以通过在测试运行器项目中进行以下操作来使其工作:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Test"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  [auto-created project stuff]
  <UsingTask AssemblyFile="xunit.runner.msbuild.dll"
      TaskName="Xunit.Runner.MSBuild.xunit" />
  <Target Name="Test">
    <xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
  </Target>
</Project>

更改后(通常是编辑.csproj文件)构建解决方案时,我得到以下信息:



即使我将xunit.runner.msbuild.dll和xunit.runner.utility.dll添加到项目所指向的位置中,也会收到此消息。但是,如果我再次构建而没有任何更改,我将始终得到以下信息:



但是我已经检查了所有这些事情:
  • xunit.runner.msbuild.dll中的任务类是Xunit.Runner.MSBuild.xunit(而xunit在类名中为小写)。
  • 任务类继承自Task,该任务实现了ITask。
  • 因此,UsingTask可能存在问题,但我不知道它是什么。

  • (我还认为问题可能是xunit.runner.msbuild.dll面向.NET 2.0,并且我使用的是VS 2010,但我在.NET 2.0中重新创建了测试运行器项目,问题仍然存在。)

    有人可以帮忙吗?

    最佳答案

    您需要指定 xunit.runner.msbuild.dll 的正确路径。
    首先,您可以设置完整路径并测试xunit是否可以按需要工作。
    但是对于真实环境,您应该指定dll的相对路径。

    <UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\..\lib\xunit\xunit.runner.msbuild.dll"
               TaskName="Xunit.Runner.MSBuild.xunit" />
    

    MSBuildProjectDirectory reserved property,包含“项目文件所在目录的绝对路径”。

    编辑:

    尝试使用全名的目标Xunit.Runner.MSBuild.xunit
    <Target Name="Test">
        <Xunit.Runner.MSBuild.xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
    </Target>
    

    关于MSBuild-尝试运行xUnit(.net)测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5160480/

    10-13 06:15