【问题标题】:How to skip Target in .csproj when --no-build is passed?传递 --no-build 时如何跳过 .csproj 中的目标?
【发布时间】:2023-06-01 11:12:01
【问题描述】:

当我运行dotnet publish --no-build ... 时,如何停止运行我的.csproj 文件中<Target> 内的<Exec> 标记中的命令?我可以停止使用整个 <Target> 部分吗?

示例:

<Target Name="BuildSpa" BeforeTargets="Build" AfterTargets="ComputeFilesToPublish" Condition="'$(Configuration.ToUpper())' == 'RELEASE'">
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
</Target>

【问题讨论】:

    标签: .net .net-core csproj dotnet-publish dotnet-build


    【解决方案1】:

    The CLI argument --no-build sets the msbuild property NoBuild to true:

            public static readonly Option NoBuildOption = new Option<bool>("--no-build", LocalizableStrings.NoBuildOptionDescription)
                .ForwardAs("-property:NoBuild=true");
    

    dotnet docs 也叫这个:

    这可以通过将--no-build 属性传递给dotnet.exe 来避免,这相当于在项目文件中设置&lt;NoBuild&gt;true&lt;/NoBuild&gt;,同时在项目文件中设置&lt;IncludeBuildOutput&gt;false&lt;/IncludeBuildOutput&gt;

    您应该能够在 Condition 检查中测试该属性:

    <Target ... Condition="'$(Configuration.ToUpper())' == 'RELEASE' and '$(NoBuild)' != 'true' ">
    ...
    

    【讨论】:

    • 太棒了!非常感谢您的快速回复!
    最近更新 更多