Я пытаюсь написать консольную программу, которая принимает имя файла шаблона T4 в качестве параметра, а затем обрабатывает шаблон. Это потому, что я хочу, чтобы пользователи могли обновлять шаблон без необходимости перекомпилировать программу.Выполнение шаблона T4: Host имеет значение null, а hostpecific = "True"
Самое простое решение, которое я нашел в том, чтобы создать второй шаблон внутри Visual Studio, что precompiles в C# класс, который, в свою очередь, выполняет мой внешний шаблон «Template.tt»:
<#@ template language="C#" hostspecific="True" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#
string template = File.ReadAllText(Host.ResolvePath("Template.tt"));
Engine engine = new Engine();
string output = engine.ProcessTemplate(template, Host);
Write(output);
#>
в пределах Program.cs моей программы консоли, я затем выполнить эту «Calling» шаблон:
string templateText = new Caller().TransformText();
Проблема заключается в том, что, когда я запускаю этот (F5), он бросает NullReferenceException на первой линии в шаблоне вызывающего абонента, потому что хост является недействительным.
Однако, я думал, что установка hostpecific на True даст мне Host.
Что мне нужно сделать, чтобы получить Хост? На самом деле, я не хочу отказываться от своих собственных. В качестве альтернативы, есть ли лучший способ выполнить внешний шаблон T4?