MSBuild& TFS2010查找Dll

时间:2011-04-13 14:26:50

标签: tfs msbuild tfs2010 msbuild-task msbuild-4.0

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

1 个答案:

答案 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)" />

$(装配件) 总是在您的情况下为空。