我正在尝试创建一个自定义MSBuild任务,该任务将在本地或在TFS2010构建期间运行我的nUnit测试。该脚本在本地运行良好,但我似乎无法在TFS构建服务器上找到测试dll。我在MSBuild.ExtensionPack中使用一个任务来运行单元测试(再次在本地工作正常)。
“装配体”列表始终为空。 TargetDir显示路径为“C:\ Builds \ 2 \ Product1 \ ci.product1.acme.com \ Binaries \”,这对我来说是正确的。我还试图在CoreCompile目标之后启动我的目标,而不是在AfterBuild目标中,而没有任何变化。
我可能犯了一些愚蠢的错误,但此时我正在杀我模式。请帮忙。
<PropertyGroup>
<RunTFSBuild>false</RunTFSBuild>
<SolutionDirectory>$(MSBuildProjectDirectory)\..</SolutionDirectory>
<ExtensionTasksPath>$(SolutionDirectory)\_shared\MSBuild\</ExtensionTasksPath>
<TPath>$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks</TPath>
<NUnitOutputFile>$(SolutionDirectory)\nUnitResults.xml</NUnitOutputFile>
<NUnitOutputFileAsMsTest>$(SolutionDirectory)\nUnitResultsAsMsTestResults.xml</NUnitOutputFileAsMsTest>
<ToolPath>$(SolutionDirectory)\_shared\MSBuild\nUnit_2.5.7</ToolPath>
</PropertyGroup>
<Import Project="$(TPath)" />
<Target Name="AfterBuild">
<CallTarget Condition="$(RunTFSBuild)!='true'" Targets="NUnitTestRunner" />
<CallTarget Condition="$(RunTFSBuild)=='true'" Targets="NUnitTestRunner;TFSNUnitTestRunner" />
</Target>
<Target Name="NUnitTestRunner">
<ItemGroup >
<Assemblies Include="$(SolutionDirectory)\**\bin\$(Configuration)\*.nUnit.Tests.dll" />
</ItemGroup>
<ItemGroup Condition="$(RunTFSBuild)=='true'">
<Assemblies Include="$(TargetDir)\**\*.nUnit.Tests.dll" />
</ItemGroup>
<Message Text="SolutionDirectory=$(SolutionDirectory)" />
<Message Text="ExtensionTasksPath=$(ExtensionTasksPath)" />
<Message Text="TargetDir=$(TargetDir)" />
<Message Text="TPath=$(TPath)" />
<Message Text="NUnitOutputFile=$(NUnitOutputFile)" />
<Message Text="Running nUnit tests from: $(Assemblies)" />
答案 0 :(得分:1)
1)尝试更改属性RunTFSBuild
<RunTFSBuild Condition="'$(RunTFSBuild)'==''">false</RunTFSBuild>
2)替换部分(可能只是清理项目,但由于CallTarget的某些限制,这可能非常重要):
<Target Name="AfterBuild" DependsOnTargets="NUnitTestRunner;TFSNUnitTestRunner" />
<Target Name="TFSNUnitTestRunner"
Condition="$(RunTFSBuild)=='true'">
<!-- TFSNUnitTestRunner Body -->
</Target>
3)如果1)和2)没有帮助,请尝试将构建的详细信息设置为诊断(msbuld键 / v:diag )。在日志中查找TFSNUnitTestRunner的所有调用,您将看到TFS上实际发生的情况。
编辑 * 程序集 *声明为ItemGroup。使用 @(程序集)访问项目:
<Message Text="Running nUnit tests from: @(Assemblies)" />
$(装配件) 总是在您的情况下为空。