MSBuild-ReadLinesFromFile“中的电子邮件错误;正在被另一个流程使用”;

MSBuild-ReadLinesFromFile“中的电子邮件错误;正在被另一个流程使用”;,msbuild,error-handling,email,Msbuild,Error Handling,Email,我试图从这里实现答案: >msbuild MyProject.proj/fl/flp:v=详细;logfile=mylog.txt 看起来很优雅,但我有个错误: c:\AccuRev\Build\u 2012\u 01\u 02\MyApp\ErrorHandlers.targets(24,9): 错误MSB3501:无法从文件“mylog.txt”中读取行。这个 进程无法访问该文件 “c:\AccuRev\Build\u 2012\u 01\u 02\MyApp\mylog.txt”因为

我试图从这里实现答案:

>msbuild MyProject.proj/fl/flp:v=详细;logfile=mylog.txt
看起来很优雅,但我有个错误:

c:\AccuRev\Build\u 2012\u 01\u 02\MyApp\ErrorHandlers.targets(24,9): 错误MSB3501:无法从文件“mylog.txt”中读取行。这个 进程无法访问该文件 “c:\AccuRev\Build\u 2012\u 01\u 02\MyApp\mylog.txt”因为 正在被另一个进程使用


mylog.txt文件被锁定,因为您将同一文件用于生成日志和ReadLinesFromFile任务


编辑:尝试执行MSBuild 2次。第一次构建项目,第二次发送电子邮件。将命令行开关与/flp1:logfile=errors.txt一起使用;errorsonly命令行参数将所有错误记录到errors.txt。然后,您可以将此文件附加到您的电子邮件中,而无需发送整个构建日志。

我知道聚会已经晚了,但我自己也在努力解决这个问题:如何访问错误日志以便将其附加到电子邮件?正在收到相同的消息--无法访问错误日志文件以附加它,甚至无法读取它

解决方案是什么?创建日志文件,然后发送副本。工作得很有魅力。我的代码如下所示:

<Target Name="FailBuild">
  <Copy SourceFiles="errors.txt" DestinationFiles="errors_email.txt" />
  <Mail SmtpServer="$(SmtpEmailServer)"
      ...
      Attachments="errors_email.txt" />
</Target>


这不是目标吗?我想通过电子邮件发送我的错误日志。你说得对,当然锁上了。我的问题是如何让它工作?那么进一步的技巧是如果成功了就不要发送电子邮件。我将尝试你的方法。那么看起来另一个家伙在另一个帖子上发布的代码就永远不会起作用了?是的。似乎从未测试过。始终会创建errors.txt文件。如果在生成过程中未报告错误,则错误文件为空。您可以使用on errors.txt文件检查生成是否失败。如果Lines输出参数为空,则不必发送错误报告。
<Target Name="FailBuild">
  <Copy SourceFiles="errors.txt" DestinationFiles="errors_email.txt" />
  <Mail SmtpServer="$(SmtpEmailServer)"
      ...
      Attachments="errors_email.txt" />
</Target>