2011-04-30 49 views
3

我正在創建MSBuild項目,當發生錯誤時將發送詳細的電子郵件。我正在使用來自MsBuild社區任務包的郵件任務。但我不知道如何將錯誤細節傳遞給這個任務 - 是否有任何預定義的變量有錯誤或什麼?如何訪問MSBuild中的錯誤詳細信息

<Target Name="All"> 
    <CallTarget Targets="DoSomething" /> 
    <OnError ExecuteTargets="ErrorEmail"/> 
</Target> 

<Target Name="ErrorEmail"> 
    <Mail SmtpServer="mysrv" From="[email protected]" To="[email protected]" Subject="An error occured" 
     Body="Error details: " /> 
</Target> 

回答

1

唯一預定義的屬性是$(MSBuildLastTaskResult),但它在你的例子中只會有值「假」,這是沒有用的。您需要在DoSomething中設置錯誤屬性,或者確保已創建日誌文件(請參閱msbuild文件記錄器參數)並在電子郵件中發送日誌文件內容。考慮這樣的事情:

> msbuild MyProject.proj /fl /flp:v=detailed;logfile=mylog.txt 

<Target Name="ErrorEmail"> 
    <ReadLinesFromFile 
     File="mylog.txt" 
     Lines="_ErrorLines" 
     /> 
    <Mail 
     SmtpServer="mysrv" 
     From="[email protected]" 
     To="[email protected]" 
     Subject="An error occured" 
     Body="Error details: @(_ErrorLines, '%0D%0A')" 
     /> 
</Target> 
+1

不錯,但得到這個錯誤:C:\ AccuRev的\ Build_2012_01_02 \ ASA.Core.Services \ ErrorHandlers.targets(24,9):呃 ROR MSB3501:無法讀取線文件「mylog.txt」。該進程不能 訪問文件'c:\ AccuRev \ Build_2012_01_02 \ ASA.Core.Services \ mylog.txt',因爲它正在被另一個進程使用。 – NealWalters 2012-01-04 14:41:49

+0

已開始的新問題:http://stackoverflow.com/questions/8728883/email-errors-in-msbuild-readlinesfromfile-is-being-used-by-another-process – NealWalters 2012-01-04 17:40:01