Ошибки электронной почты в MSBuild - ReadLinesFromFile "используется другим процессом" - PullRequest
2 голосов
/ 04 января 2012

Я пытаюсь реализовать ответ отсюда: Как получить доступ к сведениям об ошибках в MSBuild

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

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

выглядит элегантно, но я получаю эту ошибку:

C: \ AccuRev \ Build_2012_01_02 \ MyApp \ ErrorHandlers.targets (24,9): ошибка MSB3501: не удалось прочитать строки из файла "mylog.txt". процесс не может получить доступ к файлу 'c: \ AccuRev \ Build_2012_01_02 \ MyApp \ mylog.txt', потому что это используется другим процессом

Ответы [ 2 ]

2 голосов
/ 01 мая 2015

Я знаю, что уже поздно для вечеринки, но я сам боролся с этим: как получить доступ к журналу ошибок, чтобы прикрепить его к электронному письму?Получало то же сообщение - файл журнала ошибок не был доступен, чтобы прикрепить его или даже прочитать.

Решение? Скопируйте файл журнала и затем отправьте копию.Работал как шарм.Мой код выглядит примерно так:

<Target Name="FailBuild">
  <Copy SourceFiles="errors.txt" DestinationFiles="errors_email.txt" />
  <Mail SmtpServer="$(SmtpEmailServer)"
      ...
      Attachments="errors_email.txt" />
</Target>
1 голос
/ 04 января 2012

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

РЕДАКТИРОВАТЬ: попробуйте выполнить MSBuild 2 раза.Сначала создайте свои проекты, а во второй раз отправьте электронное письмо.Используйте параметр distribFileLogger командной строки с параметрами /flp1:logfile=errors.txt;errorsonly командной строки, чтобы записывать все ошибки в error.txt.Затем вы можете прикрепить этот файл к своей электронной почте, не отправляя весь журнал сборки.

...