T4 文本生成部分类

Nax*_*xin 1 .net c# t4

我正在测试 T4 文本模板的运行时文本生成功能。

MSDN - 使用 T4 的运行时文本生成它指出:

通常模板必须从应用程序的其他部分导入一些数据。为方便起见,模板构建的代码是一个分部类。您可以在项目的另一个文件中创建同一类的另一个部分。该文件可以包含一个带有参数、属性和函数的构造函数,这些参数、属性和函数既可以被嵌入在模板中的代码访问,也可以被应用程序的其余部分访问。

我试过这个(VS2017 - .NET 4.6.1)并在编译时得到以下错误 -

“CSharpFunction”不包含“TransformText”的定义

命名空间不能直接包含成员,例如字段或方法

编译转换:当前上下文中不存在名称“FunctionName”

当前上下文中不存在名称“ErrorGeneratingOutput”。

CSharpFunction.cs

partial class CSharpFunction
{
    private string FunctionName;

    public CSharpFunction(string functionName)
    {
        FunctionName = functionName;
    }
}
Run Code Online (Sandbox Code Playgroud)

CSharpFunction.tt

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
public void <#=FunctionName#>()
{
    Console.WriteLine("<#=FunctionName#>");
}
Run Code Online (Sandbox Code Playgroud)

程序.cs

class Program
{
    static void Main(string[] args)
    {
        var obj = new CSharpFunction("Test");
        string output = obj.TransformText();
        Console.WriteLine(output);
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Dip*_*hah 6

确保您的运行时文本模板文件的属性自定义工具设置为TextTemplatingFilePreprocessor

这是通过创建运行时文本模板自动完成的,该模板与在 Visual Studio 中创建文本模板时的文件类型不同。