我有一个 C# 项目,其中包含几个生成的文件(由 T4 生成),这些文件稍后包含在编译中。代码文件的生成本身工作正常,但不幸的是增量构建将生成的文件视为“自上次构建以来的更改”并每次重新构建项目。 (对我来说这是一个问题,因为每次都会重建很大一部分解决方案)。
来自 MSbuild 的警告看起来像
成功构建后项目不会显示为最新:输入编译项 '...\DtoGenerator. generated.cs' 自上次成功构建开始以来已被修改,不是最新的。请参阅https://aka.ms/incremental-build-failure。
*csproj 的相关部分:
<ItemGroup>
<UpToDateCheckInput Remove="*.generated.cs" />
<UpToDateCheckOutput Remove="*.generated.cs" />
<UpToDateCheckBuilt Remove="*.generated.cs" />
</ItemGroup>
<Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild">
<Exec WorkingDirectory="$(ProjectDir)" Command="dotnet t4 "%(TextTemplate.FullPath)" -P="$(ProjectDir)..\TextTemplating" -I="$(ProjectDir)..\TextTemplating"" />
</Target>
我按照警告中提出的链接添加了“UpToDateCheck*”,但它似乎不起作用。
我还看到了其他建议的解决方案,其中“
TextTemplateTransform
目标分别没有 T4 文件和生成文件的输入和输出。 假设
@(TextTemplate)
是
.tt
文件的集合,并且.tt
与.generated.cs
存在一对一的关系,则修改目标定义如下:<Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild"
Inputs="@(TextTemplate)"
Outputs="@(TextTemplate->'%(Filename).generated.cs')">
这是 Windows 特定版本吗?您可能需要考虑使用建模 SDK 的文本转换目标文件,而不是编写和维护您自己的
TextTemplateTransform
目标。请参阅
“在构建过程中调用文本转换”。