如果文件存在,如何在MSBuild中导致错误?

dpr*_*ice 27 msbuild

我们有一个在每晚构建之前运行的进程.如果进程失败,则生成文本文件.我需要做的就是检查文件是否存在,如果存在,则导致MSBuild失败.

我目前尝试过以下方法:

<CreateProperty Condition="Exists('C:\Process\Fail.txt')"
      Value="false">
  <Output TaskParameter="Value" PropertyName="ProcessTestPassed"/>
</CreateProperty>
<Message Text="Process did not pass" Condition="Exists('C:\Process\Fail.txt')" ContinueOnError="false" />

<ReadLinesFromFile File="C:\Process\Fail.txt"                  Condition="'$(ProcessTestPassed)'=='false'" ContinueOnError="false" >
  <Output TaskParameter="Lines" ItemName="FileContents" />
</ReadLinesFromFile>
<Message Text="FileContents: $(FileContents)"  Condition="'$(ProcessTestPassed)'=='false'" ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出的传递构建:

Task "CreateProperty"
Done executing task "CreateProperty".
Task "Message"
  QAWizardProTestPassed did not pass
Done executing task "Message".
Task "ReadLinesFromFile"
Done executing task "ReadLinesFromFile".
Task "Message"
  FileContents: 
Done executing task "Message".
Run Code Online (Sandbox Code Playgroud)

我知道以上可能是矫枉过正,但我​​只需要一些工作!我在这里想念的是什么?!

谢谢,德里克

Bru*_*pes 38

正如@dprice在评论中指出的那样,最好的解决方案是:

<Error Condition="Exists('C:\Process\Fail.txt')" Text="Process did not pass!" /> 
Run Code Online (Sandbox Code Playgroud)

  • 关于这个的问题是你放置`Error`标签.在我的情况下,我收到此错误:`错误:<Error>标签不再作为<Project>元素的子项支持.将此标记放在目标中,并将目标名称添加到<Project>元素的"InitialTargets"属性中 (2认同)