【问题标题】:T4 Text Generation Partial ClassesT4 文本生成部分类
【发布时间】:2018-06-30 04:43:46
【问题描述】:

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

MSDN - Run-Time Text Generation with T4 声明:

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

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

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

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

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

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

CSharpFunction.cs

partial class CSharpFunction
{
    private string FunctionName;

    public CSharpFunction(string functionName)
    {
        FunctionName = functionName;
    }
}

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#>");
}

Program.cs

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

我错过了什么吗?

【问题讨论】:

  • 是的,它适用于运行时模板

标签: c# .net t4


【解决方案1】:

确保您的运行时文本模板文件的属性 Custom Tools 设置为 TextTemplatingFilePreprocessor。

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

【讨论】:

  • @Naxin,你跑了吗?如果您看到 tt 文件的标题,它是不同的,这就是普通 tt 文件和 rtg tt 文件之间的不同。只需粘贴并运行,您就会明白我的意思。
  • 所以我仍然遇到的问题是,如果我保存文件,我会根据我的帖子收到错误。如果我不保存文件,则该对象没有 TransformText 函数。
  • @Naxin,你为什么不创建一个空白项目并尝试只使用我在这里提到的文件。我正在使用 VS 2017、C# 7、.Net 4.6.1,它似乎工作正常。
  • 是的,我已经做到了,我遇到了同样的问题 - VS2017 .NET 4.6.1
  • 通过引用您的项目,我能够确定问题在于 TT 文件的“CustomTool”属性设置为“TextTemplatingFileGenerator”而不是“TextTemplatingFilePreprocessor”。我意识到这是因为在创建 TT 文件时,我选择了“文本模板”而不是“运行时文本模板”,这会影响此属性。如果您可以编辑您的答案以使此信息更清晰,我很乐意将您的答案标记为正确!我非常感谢与我一起解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2012-05-25
  • 2019-07-26
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多