6

実行時にオブジェクト値を渡そうとする T4 テンプレートがあります。

基本的に、私たちがしようとしていることは次のとおりです。

  1. Windows .NET フォームから、ファイルをテキストとして読み取る

  2. 外部オブジェクト プロパティをテキスト値に設定する

  3. 出力拡張子が .java の T4 テキスト テンプレートで、そのオブジェクト プロパティにアクセスします。

ここでは、テンプレートとフォームがあり、外部クラス オブジェクトを言うだけで、非常に単純な作業を開始します。

フロー

もちろん、フォーム パーツのテキストを読み取り、foo.foocode のようなオブジェクト プロパティを設定するのはかなり簡単です。

テンプレートでそのオブジェクト変数またはプロパティにアクセスする方法がわかりません.1日以上これを見てきました..

ありがとう

4

1 に答える 1

15

テンプレート エンジンは Visual Studio の再配布可能な部分ではないため、実行時には、前処理されたテンプレートのみを変換できます。パラメータ ディレクティブを使用して、オブジェクトを前処理済みのテンプレートに渡すことができます。テンプレートに渡すオブジェクト タイプは、SerializableAttribute. メソッドを呼び出す前TransformText()に、パラメーターの値をテンプレート セッションに入れます。

前処理されたテンプレートを使用する場合、出力拡張ディレクティブは無視されます。このTransformText()メソッドは、生成されたコードを含む文字列を返します。任意のファイル形式で保存できます。

<#@ template debug="true" #>
<#@ parameter name="MyObject" type="MyNamespace.MyType" #>

<#
  // now access the passed parameter using
  this.MyObject
#>

preprocessedTemplate を呼び出します。

var templateInstance = new MyTemplate();
templateInstance.Session = new Dictionary<string, object>();
templateInstance.Session.Add("MyObject", new MyType());
templateInstance.Initialize();

var generatedCode = templateInstance.TransformText();

System.IO.File.WriteAllText("outputfile.java", generatedCode);

お役に立てれば。

于 2013-03-03T19:25:12.293 に答える