构建时T4转换的产品仅在下一个构建中使用

我有一个VS项目,其中包含:

  1. template.tt上运行TextTransform的预构建操作,以生成generated.cs

  2. generated.cs列为要编译的文件之一(即在项目文件列表中)

当我构建项目时,执行预构建操作,重新创建generated.cs ,但VS编译之前版本的generated.cs (我猜它在构建过程开始时加载到内存中)。

如何使构建使用新版本的generated.cs (即在预构建操作中生成的版本)? 如何强制构建订单?

请注意,文本转换输入是动态的,因此无法在设计时完成。

我认为您不需要自定义预构建操作。 只需将“.tt”文件添加到项目中,并将其“Custom Tool”属性设置为“TextTemplatingFileGenerator”。 您可能希望确保* .generated.cs文件也添加到项目中,但我认为VS负责这一点。

现在有一个解决这个问题的方法! Oleg Sych在他的博客上发表了一篇文章,详细介绍了如何在构建时进行转换工作。

以下是来源: https : //web.archive.org/web/20140116193428/http : //www.olegsych.com/2010/04/understanding-t4-msbuild-integration/

基本上,您只需在项目文件中包含T4构建目标,并将TransformOnBuild属性设置为true。

这是相关的摘录:

   true   

请注意Microsoft.TextTemplating.targets文件必须包含在Microsoft.CSharp.targets之后。