2010-05-05 162 views
9

我有一個程序輸出到一個文件。我從一個MSBuild項目運行它。我希望將這個輸出寫到StdOut中,以便它可以被我們的構建代理(TeamCity)接收。獲取MSBuild輸出文件到日誌?

如何讓MSBuild將文件的內容轉儲到輸出中?

回答

12

dos命令type可以這樣做。

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

    <Exec Command="type output_file"/> 
</Target> 
+0

最重要的事情在這裏(我不知道)「類型」是Exec的總(?)使用CMD.EXE,這意味着,內置命令(例如作爲'type')並且重定向在''內工作。 – 2010-05-16 09:40:20

0

你應該可以在你的構建腳本中做這樣的事情(注意我在這裏使用cygwin附帶的cat命令來輸出文件內容)。您可以將目標改爲取決於當你想項在構建過程中運行任何恰當:

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

如果您需要在服務器上安裝cygwin,你可以得到它here。我不知道一個本機DOS命令來回顯文件內容,但可能有一個。

+0

使用Windows for linux的「貓」 – 2011-04-29 18:17:18

5

如果您知道文件是被寫入您可以使用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任務不保留前導空間(甚至可能尾隨)。

這是執行演示目標時的結果。

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). 
相關問題