2012-01-04 1 views
2

Я пытаюсь реализовать ответ от сюда: How to access error details in MSBuildEmail Ошибки в 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

Файл mylog.txt заблокирован, так как вы используете тот же файл для журнала сборки и для задачи ReadLinesFromFile.

EDIT: Попробуйте выполнить MSBuild 2 раза. Сначала создайте свои проекты и второй раз, чтобы отправить электронное письмо. Используйте переключатель командной строки distributedFileLogger с параметрами командной строки /flp1:logfile=errors.txt;errorsonly, чтобы записывать все ошибки в файл 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>