Как я могу написать файл TFSBuild.proj, который запускает два пакетных файла в последовательности? - PullRequest
3 голосов
/ 31 января 2012

Мне нужно написать файл TFSBuild.proj, который последовательно запускает только два пакетных файла. Мне просто нужно вызвать proj-файл из определения сборки, а proj-файл вызовет два пакетных файла в последовательности. Все построение будет выполнено с помощью пакетного файла, находящегося на сервере сборки.

У меня есть командный файл на сервере сборки. Ниже приведен файл TFSBuild.proj, который я написал:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="GetLatest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<Target Name="EndToEndIteration"
  Condition=" '$(IsDesktopBuild)'!='true' "
  DependsOnTargets="$(EndToEndIterationDependsOn)" >
  <CallTarget Targets="GetLatest"/>
 </Target>

  <Target Name="GetLatest">
    <Exec Command="C:\BuildScript\GetFromTFSTask.bat" />
  </Target>
  <Target Name="BuildStampVer">
    <Exec Command="C:\BuildScript\BuildTask.bat" />
  </Target>
</Project>  

Я получаю ошибку:

Команда «C: \ StampBuild \ GetFromTFS.bat» завершена с кодом 3.

Мне нужно запустить пакетный файл с сервера сборки по указанному пути, я запускаю сборку с моего сервера dev.

Ответы [ 3 ]

0 голосов
/ 03 февраля 2012

Код выхода партии 3 - ошибка пути. Верны ли ссылки в пути в GetFromTFS.bat? Любые относительные ссылки на пути будут пытаться определить, откуда запускается .proj.

0 голосов
/ 03 декабря 2013

Я никогда не пробовал ваш код, но вы пробовали, вызывая cmd / c:

 <Target Name="GetLatest">
  <Exec Command="cmd /c C:\BuildScript\GetFromTFSTask.bat" />
 </Target>
 <Target Name="BuildStampVer" DependsOnTargets="GetLatest" >
  <Exec Command="cmd /c C:\BuildScript\BuildTask.bat" />
 </Target>
</Project>  

Я только изменил ваш пример выше, поэтому, пожалуйста, настройте cmd / c в командной строке правильно.

Надеюсь, это сработает.

0 голосов
/ 31 января 2012

Прочитайте это.

http://www.danielfortunov.com/software/$daniel_fortunovs_adventures_in_software_development/2009/05/21/invoking_batch_files_from_msbuild?source=ActivityLog

Обновление - Пример кода: в этом примере ваш код был изменен для использования свойства EndToEndIterationDependsOn для указания порядка зависимых целей, которые должен вызывать MSBuildпри запуске EndToEndIteration.Имеет ли это смысл?

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="GetLatest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

 <PropertyGroup>
  <EndToEndIterationDependsOn>
     GetLatest;
     BuildStampVer
  </EndToEndIterationDependsOn>
 </PropertyGroup>
 <Target Name="EndToEndIteration"
   Condition=" '$(IsDesktopBuild)'!='true' "
   DependsOnTargets="$(EndToEndIterationDependsOn)" >
 </Target>

 <Target Name="GetLatest">
  <Exec Command="C:\BuildScript\GetFromTFSTask.bat" />
 </Target>
 <Target Name="BuildStampVer" DependsOnTargets="GetLatest" >
  <Exec Command="C:\BuildScript\BuildTask.bat" />
 </Target>
</Project>  
...