Получить MSBuild для вывода файла в журнал? - PullRequest
9 голосов
/ 05 мая 2010

У меня есть программа, которая выводит в файл. Я запускаю его из проекта MSBuild. Мне бы хотелось, чтобы этот вывод был записан в StdOut, чтобы его мог получить наш агент сборки (TeamCity).

Как получить MSBuild для вывода содержимого файла на выход?

Ответы [ 3 ]

12 голосов
/ 05 мая 2010

Команда dos type может к этому.

<Target Name="ExecProgramAndOutputToStdOut">
  <Exec Command="YourProgram.exe"/>

  <Exec Command="type output_file"/>
</Target>
5 голосов
/ 07 мая 2010

Если вы знаете, где находится файл, который был записан, вы можете использовать задачу ReadLinesFromFile и затем записывать все сообщения. Например, посмотрите на файл проекта ниже.

<Project DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <_File>$(MSBuildProjectFullPath)</_File>
    </PropertyGroup>
    <Target Name="Demo">
        <ReadLinesFromFile File="$(_File)">
            <Output ItemName="_FileContents" TaskParameter="Lines"/>
        </ReadLinesFromFile>

        <Message Text="File contents: '$(MSBuildProjectFullPath)'"/>
        <!-- Prints one after another with a ';' between each line -->
        <Message Text="@(_FileContents)"/>

        <Message Text="-------------"/>
        <!-- Prints one after another with each on its own line -->
        <Message Text="%(_FileContents.Identity)"/>
    </Target>
</Project>

Этот файл читает текущий файл (через $(MSBuildProjectFullPath)) и выводит результаты на консоль. Я показал, как распечатать его двумя способами, один показывает; разделенные значения, а другой показывает одно на отдельной строке. Обратите внимание, что задача ReadLinesFromFile не сохраняет начальные (и, возможно, даже конечные) пробелы.

Вот результат, когда я выполняю цель Demo.

C:\Data\Development\My Code\Community\MSBuild>msbuild ReadLines.proj /nologo
Build started 5/6/2010 6:29:43 PM.
Project "C:\Data\Development\My Code\Community\MSBuild\ReadLines.proj" on node 1 (default targets).
Demo:
  File contents: 'C:\Data\Development\My Code\Community\MSBuild\ReadLines.proj'
  <Project DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">;<PropertyGroup>;<_Fi
  le>$(MSBuildProjectFullPath)</_File>;</PropertyGroup>;<Target Name="Demo">;<ReadLinesFromFile File="$(_File)">;<
  Output ItemName="_FileContents" TaskParameter="Lines"/>;</ReadLinesFromFile>;<Message Text="File contents: '$(MS
  BuildProjectFullPath)'"/>;<!-- Prints one after another with a ';' between each line -->;<Message Text="@(_FileC
  ontents)"/>;<Message Text="-------------"/>;<!-- Prints one after another with each on its own line -->;<Message
   Text="%(_FileContents.Identity)"/>;</Target>;</Project>
  -------------
  <Project DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
  <_File>$(MSBuildProjectFullPath)</_File>
  </PropertyGroup>
  <Target Name="Demo">
  <ReadLinesFromFile File="$(_File)">
  <Output ItemName="_FileContents" TaskParameter="Lines"/>
  </ReadLinesFromFile>
  <Message Text="File contents: '$(MSBuildProjectFullPath)'"/>
  <!-- Prints one after another with a ';' between each line -->
  <Message Text="@(_FileContents)"/>
  <Message Text="-------------"/>
  <!-- Prints one after another with each on its own line -->
  <Message Text="%(_FileContents.Identity)"/>
  </Target>
  </Project>
Done Building Project "C:\Data\Development\My Code\Community\MSBuild\ReadLines.proj" (default targets).
0 голосов
/ 05 мая 2010

Вы должны быть в состоянии сделать что-то подобное в вашем скрипте сборки (обратите внимание, что я использую команду cat, которая поставляется вместе с cygwin для вывода содержимого файла). Вы можете изменить цель на любую подходящую, в зависимости от того, когда вы хотите, чтобы элемент запускался в процессе сборки:

<Target Name="AfterGet">
    <Exec Command="cat your_file" />
</Target>

Если вам нужно установить cygwin на ваш сервер, вы можете получить его здесь . Я не знаю встроенной команды dos для вывода содержимого файла, но она может быть одна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...