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

时间:2009-08-18 11:36:58

标签: c# visual-studio msbuild t4

我有一个包含以下内容的VS项目:

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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

基本上,您只需在项目文件中包含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之后。