1

我正在尝试创建一个自定义 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)" />
4

1 回答 1

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 key /v:diag)。在日志中找到所有对 TFSNUnitTestRunner 的调用,您将看到 TFS 上实际发生了什么。

编辑: *程序集* 被声明为 ItemGroup。使用@(Assemblies)访问项目:

<Message Text="Running nUnit tests from: @(Assemblies)" />

在您的情况下,属性$(Assemblies)始终为空。

于 2011-04-13T15:14:49.963 回答