7

使用 CustomizableOutDir 时,我遇到了 TFS Team Build 正确触发 MSTest.exe 的问题。

TFSBuild.rsp

/verbosity:diagnostic
/p:CustomizableOutDir=true

TFSBuild.proj(构建片段的解决方案)

    <!-- code -->
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../foo.csproj">
      <Properties>OutputPath=$(BinariesRoot)\WindowsServices\foo\</Properties>
    </SolutionToBuild>
    <!-- tests -->
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../test/test.sln">
      <Targets>t1;t2</Targets>
      <Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>
    </SolutionToBuild>

使用<Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>and <Properties></Properties>,我在构建结束时收到以下错误:

“C:\build\BuildType\TFSBuild.proj”(TestConfiguration 目标)(1:12)->(CoreTestConfiguration 目标)->
MSBUILD:警告 MSB6003:无法运行指定的任务可执行文件“MSTest.exe”。目录名无效

找到这篇文章后,我然后添加了以下内容:

  <Target Name="AfterCompile">
    <ItemGroup>
      <SolutionOutputs Condition="'%(CompilationOutputs.Solution)' == '$(Solution)'" Include="%(RootDir)%(Directory)**\*.*" />
      <ServiceOutputs Include="$(BinariesRoot)\WindowsServices\**\*.*" />
      <TestHarnessOutputs Include="$(BinariesRoot)\TestHarness\*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(SolutionOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
    <Copy SourceFiles="@(ServiceOutputs)" DestinationFolder="$(TeamBuildOutDir)"  />
    <Copy SourceFiles="@(TestHarnessOutputs)" DestinationFolder="$(TeamBuildOutDir)"  />
  </Target>

这给了这个:

(AfterCompile 目标)->
C:\build\BuildType\TFSBuild.proj(289,5):错误 MSB3023:没有为 Copy 指定目标。请提供“DestinationFiles”或“DestinationDirectory”。

DestinationDirectory 不是 schema 的一部分http://schemas.microsoft.com/developer/msbuild/2003,但我想我还是会尝试一下。因此,我DestinationFolder将复制任务中的所有内容更改为DestinationDirectory,正如预期的那样,我得到了:

(AfterCompile 目标)->
C:\build\BuildType\TFSBuild.proj(288,44):错误 MSB4064:“复制”任务不支持“DestinationDirectory”参数。验证该参数是否存在于任务中,并且它是一个可设置的公共实例属性。
C:\build\BuildType\TFSBuild.proj(288,5):错误 MSB4063:无法使用其输入参数初始化“复制”任务。

有没有人有 CustomizableOutDir 和 MSTest 与他们的 TFS Team Build 一起工作?

编辑:

我找到了这个讨论并应用了这个更改:

<Target Name="BeforeTest">
  <!-- The tests won't run if the binaries directory does not exist -->
  <MakeDir
    Directories="$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)"
    Condition="!Exists('$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)')" />
</Target>

结果是这样的:

"C:\build\BuildType\TFSBuild.proj" (RunTest 目标) (1:11) -> "C:\build\BuildType\TFSBuild.proj" (TestConfiguration 目标) (1:12) -> (CoreTestConfiguration 目标) ->
MSBUILD:警告 MSB6006:“MSTest.exe”以代码 1 退出。

4

1 回答 1

4

这让 tfs/mstest/msbuild 很高兴。

<Target Name="BeforeTest">
  <!-- The tests won't run if the binaries directory does not exist -->
  <MakeDir
    Directories="$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)"
    Condition="!Exists('$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)')" />
</Target>

没有得到任何测试结果是部署和测试盒配置的另一个问题。

于 2009-10-21T22:04:50.267 回答