Частичные классы генерации текста T4 - PullRequest
0 голосов
/ 30 июня 2018

Я тестирую возможности T4 Text Templating для генерации текста во время выполнения.

В 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;
    }
}

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();
    }
}

Я что-то упустил?

1 Ответ

0 голосов
/ 30 июня 2018

Убедитесь, что свойство вашего файла текстового шаблона времени выполнения Пользовательские инструменты установлено на TextTemplatingFilePreprocessor .

Это выполняется автоматически путем создания текстового шаблона времени выполнения , который отличается от типа файла текстового шаблона при его создании в Visual Studio.

...