使用C#运行T4模板

18

我有一个T4模板(mycode.tt),用它生成一个cs文件。通常,我右键点击tt文件并选择RunCustomTool,它会使用一个xml文件来为我生成代码。现在我想要使用一个c#窗体应用程序来运行自定义工具。因此,当单击按钮时,我想要运行Custom Tool。是否可以从c#中运行CustomTool。

编辑:

我有2个tt文件,其中一个没有与之关联的codebehind cs文件。但是另一个有一个附加的.cs文件,我从第一个.tt文件中调用第二个文件的TransformText()方法。因此,我需要调用第一个文件。所以我不能使用TransformText()方法。是否有一种动态调用textTemplate文件的方法?

2个回答

18

如果您使用VS2010,可以轻松实现。如果您向项目添加一个新文件,请选择预处理文本模板文件。您可以像普通文件一样编辑模板。该文件不直接生成输出,而是生成正常生成的代码。我知道这听起来很令人困惑。但您在输出文件中看到的是由文本模板工具包生成的用于获取输出的代码(多多少少)。

下面是一个名为"TestTemplate.tt"的预处理文本模板的简短示例以及如何在您的代码中使用它:

tt文件:

<#@ template language="C#" #>
Some output.

Code:

using System;
using System.Diagnostics;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            TestTemplate testTemplate = new TestTemplate();
            Debug.Print(testTemplate.TransformText());
        }
    }
}

6
对于现有的模板,你可以在属性中将“Custom Tool”从“TextTemplatingFileGenerator”更改为“TextTemplatingFilePreprocessor”。 - Daniel Ballinger
1
你如何提供参数? - Georg

7
我建议采用@jb_上面回答的预处理路线。
作为另一种选择,如果您需要模板仍然可编辑而无需编译步骤,以便与自定义C#应用程序一起使用,并且该应用程序仅在Visual Studio旁边的计算机上部署,您可以编写自定义主机。

http://msdn.microsoft.com/en-us/library/bb126519.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接