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

Blazor Wasm PWA(AOT)预发布PowerShell脚本重复执行问题

解决Blazor Wasm PWA发布时预脚本重复执行的问题

问题背景

开发带AOT的Blazor Wasm PWA时,在项目文件中添加了如下预发布PowerShell脚本配置,但脚本会执行两次:

<Target Name="PrePublishScript" BeforeTargets="PrepareForPublish">
    <Exec Command="powershell -ExecutionPolicy Bypass -File script.ps1" />
</Target>

通过msbuild WRCT.csproj /t:Publish /p:Configuration=Release /v:diag > build.log生成的诊断日志可知,PrepareForPublish被包含在_CorePublishTargets和_PublishNoBuildAlternativeDependsOn两个目标组中,因此被触发两次。

可行解决方案

方案1:使用_GatherBlazorFilesToPublish作为前置目标

你尝试将BeforeTargets改为_GatherBlazorFilesToPublish后脚本仅执行一次,这个目标是合规的——它是Blazor发布流程中专门用于收集待发布文件的内部目标,在AOT编译、压缩等核心发布步骤前仅执行一次,完全适合作为预发布脚本的触发点。修改后的配置:

<Target Name="PrePublishScript" BeforeTargets="_GatherBlazorFilesToPublish">
    <Exec Command="powershell -ExecutionPolicy Bypass -File script.ps1" />
</Target>

方案2:给目标添加Condition避免重复执行

通过自定义属性标记脚本已执行,即使PrepareForPublish触发多次,也只会执行一次:

<Target Name="PrePublishScript" BeforeTargets="PrepareForPublish" Condition="!$(PrePublishScriptExecuted)">
    <Exec Command="powershell -ExecutionPolicy Bypass -File script.ps1" />
    <PropertyGroup>
        <PrePublishScriptExecuted>true</PrePublishScriptExecuted>
    </PropertyGroup>
</Target>

方案3:使用PublishDependsOn扩展发布依赖

采用MSBuild扩展发布流程的标准方式,将自定义目标插入到发布核心依赖链中,确保只执行一次:

<Target Name="PrePublishScript">
    <Exec Command="powershell -ExecutionPolicy Bypass -File script.ps1" />
</Target>
<PropertyGroup>
    <PublishDependsOn>PrePublishScript;$(PublishDependsOn)</PublishDependsOn>
</PropertyGroup>

总结

  • 优先推荐方案1,贴合Blazor发布特定流程,逻辑最清晰;
  • 方案2适合需要兼容更多场景的情况;
  • 方案3是通用性更强的MSBuild标准扩展方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:52:26