我有一個程序輸出到一個文件。我從一個MSBuild項目運行它。我希望將這個輸出寫到StdOut中,以便它可以被我們的構建代理(TeamCity)接收。獲取MSBuild輸出文件到日誌?
如何讓MSBuild將文件的內容轉儲到輸出中?
我有一個程序輸出到一個文件。我從一個MSBuild項目運行它。我希望將這個輸出寫到StdOut中,以便它可以被我們的構建代理(TeamCity)接收。獲取MSBuild輸出文件到日誌?
如何讓MSBuild將文件的內容轉儲到輸出中?
dos命令type可以這樣做。
<Target Name="ExecProgramAndOutputToStdOut">
<Exec Command="YourProgram.exe"/>
<Exec Command="type output_file"/>
</Target>
你應該可以在你的構建腳本中做這樣的事情(注意我在這裏使用cygwin附帶的cat命令來輸出文件內容)。您可以將目標改爲取決於當你想項在構建過程中運行任何恰當:
<Target Name="AfterGet">
<Exec Command="cat your_file" />
</Target>
如果您需要在服務器上安裝cygwin,你可以得到它here。我不知道一個本機DOS命令來回顯文件內容,但可能有一個。
使用Windows for linux的「貓」 – 2011-04-29 18:17:18
如果您知道文件是被寫入您可以使用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).
最重要的事情在這裏(我不知道)「類型」是Exec的總(?)使用CMD.EXE,這意味着,內置命令(例如作爲'type')並且重定向在''內工作。 –
2010-05-16 09:40:20