При использовании 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.