4

我正在尝试(但失败)编写一个简单的模板文件:

<#@ 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 中单击模板时,属性窗口中有“类名”属性。这就是我想要的!当我在其中输入文本并构建时,出现以下错误:

 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 的属性窗口中设置的字符串命名的类。可悲的是,我在很早的一步就失败了!!

4

3 回答 3

2

您应该Initialize()首先调用 mehod,如下所示:

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);
于 2012-05-28T08:37:22.790 回答
0

上次我尝试时,这种情况不起作用,因为属性指令没有标准处理器,并且 Visual Studio 不支持它。您可能正在使用 Clarius T4 编辑器为此指令提供的有限支持;我记得遇到过类似的错误。

于 2009-05-24T21:53:21.597 回答
0

我在将项目升级到 VS2017 时遇到了同样的问题,我通过在 2017 IDE 中创建模板来修复它。

于 2019-06-13T14:18:22.210 回答