You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio执行clean命令触发绑定PrepareForBuild的自定义构建目标问题咨询

根本原因

  • Xamarin 项目在 VS 2019 对应的 MSBuild 版本中,Clean 流程会隐式触发轻量的PrepareForBuild执行,用于清理资源映射、中间生成的项目元数据。这个轻量执行的日志默认不会输出到主构建输出窗口,因此你看不到目标执行的日志,但目标确实被触发运行。
  • 你定义的自定义目标没有添加场景过滤条件,只要PrepareForBuild被触发,不管是正常构建场景、Clean 场景还是 VS 后台的设计时构建场景,都会执行,就出现了你遇到的异常触发问题。
  • 调整为AfterTargets="BeforeBuild"后不会在 Clean 时触发,是因为BeforeBuild默认仅在执行 Build 主目标的场景下才会被调用,Clean 上下文不会运行该目标。

解决方案

给自定义目标添加执行条件,过滤掉非构建场景即可,修改后的目标代码如下:

<Target Name="MyCustomTarget" AfterTargets="PrepareForBuild" 
        Condition="'$(DesignTimeBuild)' != 'true' And '$(BuildingProject)' == 'true' And '$(IsClean)' != 'true'">
  <Message Importance="high" Text="=== executing MyCustomTarget" />
  <!-- do some file modifications -->
</Target>

各条件的作用:

  • '$(DesignTimeBuild)' != 'true':过滤 VS 后台用于智能提示、属性面板渲染的设计时构建,避免编辑代码时目标被后台误触发
  • '$(BuildingProject)' == 'true':仅在主动执行项目构建动作时运行目标
  • '$(IsClean)' != 'true':明确排除 Clean 场景的执行

如果仍出现 Clean 时触发的情况,可以额外追加条件And '$(TargetName)' != 'Clean'进一步过滤。修改后目标仍然会在PrepareForBuild之后、BeforeBuild之前执行,完全符合你对执行时机的要求。


内容的提问来源于stack exchange,提问作者Jimmie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:06:04