Я тестирую возможности 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();
}
}
Я что-то упустил?