我有一个包含以下内容的VS项目:
在TextTransform
上运行template.tt
的预生成操作,以生成generated.cs
generated.cs
列为要编译的文件之一(即在项目文件列表中)
当我构建项目时,执行预构建操作,重新创建generated.cs
,但VS编译先前版本的generated.cs
(我猜它在构建时加载到内存中过程开始)。
如何使构建使用generated.cs
的新版本(即在预构建操作中生成的版本)?如何强制构建顺序?
请注意,文本转换输入是动态的,因此无法在设计时完成。
答案 0 :(得分:4)
我认为您不需要自定义预构建操作。只需将“.tt”文件添加到项目中,并将其“Custom Tool”属性设置为“TextTemplatingFileGenerator”。您可能希望确保* .generated.cs文件也添加到项目中,但我认为VS会处理这个问题。
答案 1 :(得分:4)
现在有了这个问题的解决方案! Oleg Sych在他的博客上发表了一篇文章,详细介绍了如何在构建时进行转换。
基本上,您只需在项目文件中包含T4构建目标,并将TransformOnBuild属性设置为true。
以下是相关摘录:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />
请注意,Microsoft.TextTemplating.targets文件必须包含在Microsoft.CSharp.targets之后。