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

能否通过单次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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:49:54