CustomizableOutDir = true ломает MSTest.exe во время Team Build - PullRequest
7 голосов
/ 21 октября 2009

При использовании 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>, и с <Properties></Properties> я получаю следующую ошибку в конце сборки:

"C: \ построить \ 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: \ построить \ BuildType \ TFSBuild.proj (289,5): ошибка MSB3023: нет места назначения указано для копирования. Пожалуйста, поставьте либо "DestinationFiles", либо "DestinationDirectory".

DestinationDirectory не является частью схемы http://schemas.microsoft.com/developer/msbuild/2003, но я решил, что все равно попробую. Поэтому я изменил все DestinationFolder на задачах копирования на DestinationDirectory и, как и ожидалось, получил следующее:

(Цель AfterCompile) ->
C: \ построить \ BuildType \ TFSBuild.proj (288,44): ошибка MSB4064: Параметр "DestinationDirectory" не поддерживается задачей «Копировать». Убедитесь, что параметр существует на задача, и это настраиваемая публика свойство экземпляра.
C: \ построить \ BuildType \ TFSBuild.proj (288,5): ошибка MSB4063: задача «Копировать» может не инициализируется с его вводом параметры.

Кто-нибудь там, где CustomizableOutDir и MSTest работают вместе в гармонии с их TFS Team Build?

EDIT:

Я нашел это обсуждение и применил это изменение:

<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: \ построить \ BuildType \ TFSBuild.proj" (Цель RunTest) (1:11) -> "C: \ построить \ BuildType \ TFSBuild.proj" (Цель TestConfiguration) (1:12) -> (Цель CoreTestConfiguration) ->
MSBUILD: предупреждение MSB6006: «MSTest.exe» завершен с кодом 1.

1 Ответ

4 голосов
/ 22 октября 2009

Это порадовало 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>

Отсутствие результатов теста - другая проблема с развертыванием и конфигурацией блока тестирования.

...