Ошибка при попытке передать параметр в шаблон t4 - PullRequest
3 голосов
/ 25 мая 2009

Я пытаюсь (и не могу) написать простой файл шаблона:

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ include file="T4Toolbox.tt" #>
<#@ property name="ClassName" processor="PropertyProcessor" type="System.String" #>

public class <#= ClassName #>
{
}

Когда я нажимаю на шаблон в Visual Studio, в окне свойств появляется свойство «ClassName». Это то, что я хочу! Когда я ввожу текст и строю, я получаю следующую ошибку:

 Error  1   Running transformation: System.ArgumentNullException: Value cannot be null.
Parameter name: objectToConvert
   at Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert)
   at Microsoft.VisualStudio.TextTemplating32ED7F6BD49D2C3984C2CB7194792D4B.GeneratedTextTransformation.TransformText() in c:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt:line 6  C:\Users\neilt.PAV12\Documents\Visual Studio 2008\Projects\ConsoleApplication2\ConsoleApplication2\ClassMaker.tt    1   1   

Надеюсь, вы можете увидеть, что я хочу сделать: я бы хотел, чтобы мой шаблон выплевывал файл .cs с именем класса со строкой, которую я установил в окне свойств Visual Studio. К сожалению, я терплю неудачу на очень раннем этапе !!

Ответы [ 3 ]

2 голосов
/ 28 мая 2012

Сначала вы должны вызвать Initialize() метод, например:

ClassTemplate t = new ClassTemplate();
t.Session = new Dictionary<string, object>();
t.Session["ClassName"] = "Person";

t.Initialize();//This is important.

string output = t.TransformText();
Console.WriteLine(output);
0 голосов
/ 13 июня 2019

У меня была такая же проблема при обновлении проекта до VS2017, и я исправил ее, создав шаблоны в IDE 2017.

0 голосов
/ 25 мая 2009

В последний раз, когда я пытался , этот сценарий не работал, потому что нет стандартного процессора для директивы свойства и не поддерживается в Visual Studio. Возможно, вы используете ограниченную поддержку, предоставляемую этой директивой редактором Clarius T4; Я помню, как получал похожую ошибку.

...