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

MSBuild生成文件最新检查失效,项目重复构建问题求助

解决T4生成文件导致的MSBuild增量构建反复触发问题

以下是可行的csproj配置修改方案,既能保证生成文件被编译,又能避免增量构建误判:

步骤1:重构T4生成目标为增量构建

替换原有的TextTemplateTransform目标,添加输入输出关联,让MSBuild仅在T4模板文件变更时才重新生成代码:

<ItemGroup>
  <!-- 定义T4模板文件项 -->
  <TextTemplate Include="**/*.tt" Exclude="**/*.generated.tt" />
  <!-- 关联模板与生成文件的映射 -->
  <TextTemplateOutput Include="%(TextTemplate.RelativeDir)%(TextTemplate.FileName).generated.cs" />
</ItemGroup>

<Target Name="TextTemplateTransform" 
        BeforeTargets="BeforeBuild"
        Inputs="@(TextTemplate)"
        Outputs="@(TextTemplateOutput)">
  <Exec WorkingDirectory="$(ProjectDir)" 
        Command="dotnet t4 &quot;%(TextTemplate.FullPath)&quot; -P=&quot;$(ProjectDir)..\TextTemplating&quot; -I=&quot;$(ProjectDir)..\TextTemplating&quot;" />
</Target>

步骤2:正确排除生成文件的增量检查

将生成文件从UpToDateCheckBuilt中移除,同时确保它们仍被纳入编译:

<ItemGroup>
  <!-- 确保生成文件被编译 -->
  <Compile Include="**/*.generated.cs" />
  <!-- 从增量构建检查中排除生成文件 -->
  <UpToDateCheckBuilt Remove="**/*.generated.cs" />
</ItemGroup>

原配置无效的原因

  • 原UpToDateCheck*的通配符未正确匹配文件路径(比如相对路径与绝对路径的差异),改用递归通配符**/*.generated.cs更可靠。
  • 原目标未设置Inputs和Outputs,导致MSBuild无法判断是否需要重新执行生成操作,每次构建都会修改生成文件,触发增量检查误判。

注意:不要使用<Compile Remove="*.generated.cs"/>,这会直接将生成文件排除在编译范围外,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:04