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

如何在增量构建场景下正确使用<MSBuild>任务?

实现方案

第一步:给BatchDeps目标添加增量检查

MSBuild的自定义目标默认不会做增量判断,需要显式指定Inputs(目标依赖的输入文件)和Outputs(目标生成的输出文件),MSBuild会自动对比两者的时间戳,只有输入更新时才会执行目标。
修改你的BatchDeps目标如下,路径可以根据你的实际项目结构调整:

<Target Name="BatchDeps"
        Inputs="$(SolutionDir)A\A.csproj;$(SolutionDir)A\**\*.cs;$(SolutionDir)A\**\*.resx"
        Outputs="$(SolutionDir)A\bin\Config1\A.dll;$(SolutionDir)A\bin\Config1\A.pdb;$(SolutionDir)A\bin\Config2\A.dll;$(SolutionDir)A\bin\Config2\A.pdb">
     <MSBuild Projects="$(SolutionPath)" Targets="A" Properties="Configuration=Config1" SkipNonexistentTargets="True"/>
     <MSBuild Projects="$(SolutionPath)" Targets="A" Properties="Configuration=Config2" SkipNonexistentTargets="True"/>
</Target>
  • Inputs里可以按需加入A的其他依赖文件(比如配置文件、资源文件等),如果嫌匹配所有源码麻烦,也可以只填A的项目文件,缺点是只有修改A的项目配置时才会触发A的重编,修改源码不会触发。
  • Outputs必须包含A在两个配置下所有你需要依赖的输出文件,确保和实际生成路径一致。

第二步:将A的输出加入B的编译输入依赖

要避免B的构建直接提示“所有输出均为最新”,需要把A的两个配置的输出文件加入到B的编译增量检查的输入列表里,MSBuild会自动检查这些文件的时间戳,只要有更新就会触发B的重新构建。
直接在B的项目文件里加入如下配置即可:

<ItemGroup>
  <!-- 替换为你的A项目对应配置的实际输出路径 -->
  <CustomAdditionalCompileInputs Include="$(SolutionDir)A\bin\Config1\A.dll" />
  <CustomAdditionalCompileInputs Include="$(SolutionDir)A\bin\Config2\A.dll" />
</ItemGroup>

CustomAdditionalCompileInputs是MSBuild内置的项组,所有加入这个组的文件都会被作为编译目标的输入参与增量检查,不需要修改原有Build目标的逻辑。

验证方法

修改A项目的任意源码文件,触发B的构建:

  1. 首先会判定BatchDeps目标的输入更新,执行A的两个配置的构建
  2. 之后判定B的编译输入更新,执行B的正常构建
    不会再出现直接跳过构建提示最新的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:54:03