CustomizableOutDir = true在Team Build期间中断MSTest.exe

slf*_*slf 7 tfs mstest team-build

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

TFSBuild.rsp

/verbosity:diagnostic
/p:CustomizableOutDir=true
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

"C:\ build\BuildType\TFSBuild.proj"(TestConfiguration target)(1:12) - >(CoreTestConfiguration target) - >
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>
Run Code Online (Sandbox Code Playgroud)

这给了这个:

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

DestinationDirectory不是架构的一部分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>
Run Code Online (Sandbox Code Playgroud)

结果如下:

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

slf*_*slf 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>
Run Code Online (Sandbox Code Playgroud)

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