2012-01-04 8 views
2

私はここからの回答を実装しようとしています: How to access error details in MSBuildメールエラー - ReadLinesFromFileは「別のプロセスによって使用されている」

> 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> 

はエレガントに見えるが、私はこのエラーを取得しています:

c:\AccuRev\Build_2012_01_02\MyApp\ErrorHandlers.targets(24,9): error MSB3501: Could not read lines from file "mylog.txt". The process cannot access the file 'c:\AccuRev\Build_2012_01_02\MyApp\mylog.txt' because it is being used by another process

答えて

1

ビルドログとReadLinesFromFileタスクで同じファイルを使用しているため、mylog.txtファイルがロックされています。

EDIT:MSBuildを2回実行してください。最初にプロジェクトをビルドし、2回目に電子メールを送信します。 /flp1:logfile=errors.txt;errorsonlyコマンドラインパラメータを使用してdistributedFileLoggerコマンドラインスイッチを使用して、すべてのエラーをerrors.txtに記録します。ビルドログ全体を送信せずに、このファイルを電子メールに添付することができます。

+1

それは目標ですか?私はエラーの私のログを電子メールしたい。あなたは正しいのですが、もちろんロックされています。私の質問は、それを働かせる方法です。 – NealWalters

+0

私は自分の答えを改善しました:) – Ludwo

+0

それが成功すれば、さらなるトリックはメールを送らないことでしょう。 – NealWalters

2

私はパーティーに遅れていることは知っていますが、私は自分自身で苦労していました。エラーログにアクセスして電子メールに添付する方法は?同じメッセージが表示されていました。エラーログファイルにアクセスして添付することも、読み取ることさえできませんでした。

解決策はありますか? Copyログファイルを作成し、コピーを送信します。魅力のように働いた。私のコードは次のようになります:

<Target Name="FailBuild"> 
    <Copy SourceFiles="errors.txt" DestinationFiles="errors_email.txt" /> 
    <Mail SmtpServer="$(SmtpEmailServer)" 
     ... 
     Attachments="errors_email.txt" /> 
</Target> 
関連する問題