我正在添加自定义.tt
模板生成目标到我的项目之前运行CoreBuild
,似乎有两种方法可以做到这一点:
<Project...>
<Target Name="TransformOnBuild" AfterTargets="BeforeBuild">
</Project>
and
<Project...>
<Target Name="TransformOnBuild" BeforeTargets="CoreBuild">
</Project>
如果我的目标应该在构建项目之前运行,因为项目依赖于它,那么我使用后者会更好吗?我见过前者用来做诸如生成文本模板之类的事情,但这似乎是一种不可靠的方法,因为它可能会在之后运行CoreBuild
,为时已晚。或者有什么原因吗AfterTargets="BeforeBuild"
仍然保证在核心构建之前运行吗?
我也见过BeforeTargets="BeforeBuild"
这将建设得更早。这是放置 `.tt 文本生成目标的更好位置吗?
基于@stjin的答案,一个好的解决方案似乎是使用
BeforeTargets="CoreCompile" DependsOnTargets="PrepareForBuild"
这就是 .net sdk(.net core / 标准项目的新型 csproj)用于自动生成 AssemblyInfo.cs.
它使用以下注释来解释原因:
请注意,这必须在每次调用 CoreCompile 之前运行
确保所有编译器运行都能看到生成的程序集信息。那里
至少有一种涉及 Xaml 且调用 CoreCompile 的场景
没有其他潜在的钩子,例如 Compile 或 CoreBuild 等,所以
我们直接连接到 CoreCompile。此外,我们必须运行afterPrepareForBuild 确保中间目录已经
创建的。
请注意“中间目录”(obj/[TargetFramework]
在这种情况下)是输出的位置.cs
文件放置在这种情况下,这也可能是您想要做的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)