在项目内无错误地终止MSBuild

本文关键字:终止 MSBuild 无错误 项目 | 更新日期: 2023-09-27 18:02:00

是否有可能终止MSBuild过程为一个项目(*.csproj)作为一个正常的执行流?

之类的
<Exit Condition="..."></Exit>

这应该不会引发错误。它应该是在某些条件下跳过构建项目的有效流程。

该项目是一个Visual Studio项目,这意味着构建目标是在Microsoft.Common.Target文件中定义的,而不是在csproj.

在项目内无错误地终止MSBuild

单独使用error标签将终止脚本而不会引发错误:试试这个:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Build">
    <Message Text="Before error"/>
    <Error/>
    <Message Text="After error"/>
  </Target>
</Project>

我找到了一个解决方法。也许这不是最优雅的做法,但它是有效的。

我必须重写"构建"目标。原始目标在Microsoft.Common.Targets文件中定义。我检查了文件,看看"构建"目标是如何定义的,它是这样的

<Target
   Name="Build"
   Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
   DependsOnTargets="$(BuildDependsOn)"
   Returns="$(TargetPath)" />

因此,在我的项目文件中,我必须创建我自己的"Build"目标,它将与上面的目标相同,唯一的区别是它将具有额外的条件逻辑

在我的csproj文件中我创建了这个:

<Target
   Name="Build"
   Condition=" '$(_InvalidConfigurationWarning)' != 'true' And (.... more conditions here....) "
   DependsOnTargets="$(BuildDependsOn)"
   Returns="$(TargetPath)" />

这似乎可以工作,特别是当项目作为解决方案中多个项目的批量构建的一部分构建时。