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 でテンプレートをクリックすると、プロパティ '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   

私のやりたいことがわかるといいのですが、Visual Studio のプロパティ ウィンドウで設定した文字列で名前を付けたクラスを持つ .cs ファイルをテンプレートから出力したいと考えています。悲しいことに、私は非常に早い段階で失敗しています!!

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 に答える