.NET 8.0多项目解决方案:如何仅执行一次预构建dotnet format脚本
解决方案级单次执行dotnet format的实现方法
要解决Directory.Build.props中脚本被每个项目重复执行的问题,核心是通过MSBuild的内置属性和自定义标记,限定Target仅在解决方案构建的初始化阶段执行一次,具体实现如下:
具体配置代码
在你的Directory.Build.props文件中添加以下Target节点:
<Target Name="RunDotNetFormatOnce" BeforeTargets="Build" Condition="'$(BuildingSolution)' == 'true' And '$(DotNetFormatExecuted)' != 'true'"> <Exec Command="dotnet format" /> <PropertyGroup> <DotNetFormatExecuted>true</DotNetFormatExecuted> </PropertyGroup> </Target>
关键逻辑说明
BuildingSolution属性:MSBuild在执行解决方案级构建时会自动将该属性设为true,单个项目构建时为false,这是区分方案级和项目级构建的核心标记。- 自定义
DotNetFormatExecuted属性:首次执行后将其设为true,即使后续有其他触发逻辑,也会通过Condition判断跳过重复执行。 BeforeTargets="Build":确保脚本在所有项目构建开始前执行。
注意事项
- 如果需要指定特定的格式规则文件或解决方案路径,可以修改
dotnet format命令,比如dotnet format $(SolutionDir)/YourSolution.sln --config .editorconfig。 - 若你的构建流程有特殊的前置Target,可根据实际需求调整
BeforeTargets的值,比如改为BeforeTargets="Restore"。
内容的提问来源于stack exchange,提问作者Sophie cai
相关产品推荐
相关产品推荐

