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

如何从生成文件读取内容设置MSBuild CustomBuild的AdditionalInputs

实现方案

你需要通过MSBuild的项分批机制,逐个读取每个源文件对应的依赖文件,将读取到的路径绑定到对应源文件的AdditionalInputs元数据上,再传递给CustomBuild任务即可,完整实现如下:

首先提前给每个源文件指定对应的依赖文件路径:

<ItemGroup>
  <!-- 替换后缀和DepsFile路径为你实际的规则 -->
  <CustomSources Include="*.cpp"> <!-- 示例为cpp源文件,按需修改 -->
    <DepsFile>$(IntDir)%(Filename).d</DepsFile> <!-- 对应每个源文件生成的依赖文件路径 -->
  </CustomSources>
</ItemGroup>

然后新增读取依赖的目标,用分批逻辑处理每个源文件:

<!-- 按每个CustomSource分批执行,单独读取对应的依赖文件 -->
<Target Name="ReadCustomDependencies" Outputs="%(CustomSources.Identity)">
  <ReadLinesFromFile File="%(CustomSources.DepsFile)" Condition="Exists('%(CustomSources.DepsFile)')">
    <Output TaskParameter="Lines" ItemName="_TempDependencyFiles" />
  </ReadLinesFromFile>

  <!-- 将依赖写入当前源文件的AdditionalInputs元数据,源文件本身也要加入避免漏判变更 -->
  <ItemGroup>
    <CustomSources Condition="'%(Identity)' == '%(CustomSources.Identity)'">
      <AdditionalInputs>%(CustomSources.Identity);@(_TempDependencyFiles)</AdditionalInputs>
    </CustomSources>
    <!-- 清空临时变量,避免分批时不同源文件的依赖互相污染 -->
    <_TempDependencyFiles Remove="@(_TempDependencyFiles)" />
  </ItemGroup>
</Target>

最后修改你的Custom目标,依赖读取逻辑后传递参数:

<Target Name="Custom" Condition="'@(CustomSources)' != ''" DependsOnTargets="ReadCustomDependencies">
  <ItemGroup>
    <CustomItem Include="@(CustomSources)">
      <Command>
        <!-- 你原来的执行命令 -->
      </Command>
      <!-- 直接读取之前绑定的AdditionalInputs元数据 -->
      <AdditionalInputs>%(CustomSources.AdditionalInputs)</AdditionalInputs>
    </CustomItem>
  </ItemGroup>
  <CustomBuild Sources="@(CustomSources)" />
</Target>

注意事项

  • 首次构建时依赖文件还未生成,会全量执行CustomBuild,生成依赖文件后后续构建就会自动按依赖文件判断增量,符合预期
  • 如果依赖文件内的路径是相对路径,需确保是相对于项目文件的路径,否则需要提前拼接为绝对路径,避免MSBuild文件变更判断失效
  • 如果依赖文件的生成逻辑也是你的构建流程的一部分,需要把依赖文件的生成目标加到ReadCustomDependencies的DependsOnTargets里,保证读取时文件已经生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:03