【问题标题】:MSBuild & TFS2010 Find DllsMSBuild & TFS2010 查找 Dll
【发布时间】:2011-08-04 18:49:33
【问题描述】:

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

【问题讨论】:

    标签: tfs msbuild msbuild-task msbuild-4.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 上实际发生了什么。

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

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

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

    【讨论】:

    • 关于 1 和 2,目标运行良好,因此这些无济于事。我一直在将日志记录详细程度设置为诊断,但没有看到任何有用的信息。
    • 什么意思?您是否找到了对 NUnitTestRunner 和/或 TFSNUnitTestRunner 的调用?如果不是,那么问题比您在此处描述的要高。
    • 我一直都有这些目标并且它们正在运行(我没有在帖子中列出整个 MSBuild 脚本)。在 NUnitTestRunner 目标中,Assemblies 在 TFS 构建服务器上运行时始终为空。
    • 就是这样,我将 Assemblies 项目列表作为属性引用。我知道这将是一件愚蠢的事情。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多