我正在尝试设置一个 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 文件)时,我得到以下信息:
无法从程序集 C:\Users[myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll 加载“Xunit.Runner.MSBuild.xunit”任务。无法加载文件或程序集 'file:///C:\Users[myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll' 或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项都可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的公共类。
即使我将 xunit.runner.msbuild.dll 和 xunit.runner.utility.dll 添加到它所指位置的项目中,我也会收到此消息。但是,如果我在没有任何更改的情况下再次构建,我会一直得到这个:
未找到“xunit”任务。检查以下内容: 1.) 项目文件中的任务名称与任务类的名称相同。2.) 任务类是“公共的”并且实现了 Microsoft.Build.Framework.ITask 接口。3.) 在项目文件或位于“C:\Windows\Microsoft.NET\Framework\v4.0.30319”目录的 *.tasks 文件中正确声明了任务。
但我已经检查了所有这些事情:
- xunit.runner.msbuild.dll 中的任务类是
Xunit.Runner.MSBuild.xunit
(并且xunit 在类名中是小写的)。 - 任务类继承自实现 ITask 的 Task。
- 所以可能UsingTask有问题,但我不知道是什么问题。
(我还认为问题可能是 xunit.runner.msbuild.dll 是针对 .NET 2.0 的,而我使用的是 VS 2010,但我在 .NET 2.0 中重新创建了测试运行程序项目,问题仍然存在。)
任何人都可以帮忙吗?