能否通过单次dotnet build生成多套类库以避免重复构建?
一次性构建多套专属类库,避免重复编译
当然可以实现一次性生成所有专属类库集合,同时避免重复编译代码。核心思路是利用MSBuild的自定义目标和任务,复用单次编译的结果,批量生成不同配置的类库。
1. 统一管理目标名称列表
在项目文件中添加一个属性,集中定义所有需要生成的外部项目名称:
<PropertyGroup> <!-- 用分号分隔所有目标名称,可按需扩展 --> <DestinationNames>Name1;Name2</DestinationNames> </PropertyGroup>
2. 添加自定义批量构建目标
在项目文件末尾添加自定义Target,先完成核心代码的编译,再遍历所有目标名称生成对应专属类库:
<Target Name="BuildAllDestinations" DependsOnTargets="Build"> <!-- 遍历所有目标名称,并行生成对应类库 --> <MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" <!-- 若需生成NuGet包可替换为Pack --> Properties="DestinationName=%(DestinationNames.Identity);OutputPath=$(OutputPath)%(DestinationNames.Identity)/" BuildInParallel="true" Condition="'%(DestinationNames.Identity)' != ''" /> </Target>
DependsOnTargets="Build":确保先完成一次核心代码编译,后续所有生成步骤复用该编译结果OutputPath=$(OutputPath)%(DestinationNames.Identity)/:为每个目标分配独立输出目录,避免文件覆盖BuildInParallel="true":开启并行构建提升生成效率
3. 执行批量构建命令
只需运行一条命令,即可一次性生成所有专属类库:
dotnet build -t:BuildAllDestinations
核心优化说明
通过先执行一次完整的Build目标,我们已经完成了代码编译、资源处理等耗时操作,后续针对不同DestinationName的生成步骤,仅需基于已编译的中间产物,调整AssemblyName、Version等配置并输出最终程序集,彻底避免了重复编译代码的问题。
内容的提问来源于stack exchange,提问作者Piotrek
相关产品推荐
相关产品推荐

