T4 テンプレートのファイル名をパラメーターとして受け取り、テンプレートを処理するコンソール プログラムを作成しようとしています。これは、ユーザーがプログラムを再コンパイルせずにテンプレートを更新できるようにするためです。
私が見つけた最も簡単な解決策は、Visual Studio 内で C# クラスにプリコンパイルする 2 つ目のテンプレートを作成することでした。これにより、外部テンプレート「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 内で、次の "呼び出し" テンプレートを実行します。
string templateText = new Caller().TransformText();
問題は、これを実行すると (F5)、ホストが null であるため、呼び出し元テンプレートの最初の行で NullReferenceException がスローされることです。
ただし、ホスト固有を True に設定すると、ホストが得られると思いました。
ホストを取得するにはどうすればよいですか? 本当に自分で転がしたくありません。または、外部 T4 テンプレートを実行するより良い方法はありますか?