0

私は次のことをしています:

  1. XML でワークフローを定義します。
  2. LINQ を使用してワークフローをオブジェクトに変換します。
  3. 実行時に、#2 に基づいて T4 ベースの C# ファイルを作成します。
  4. コンパイルとインスタンス化 #3.

注:これはすべてクライアント コンピューターで実行する必要があるため、Visual Studio に依存することはできません。

#1 と #2 はわかりましたが、#3 の一部だけです。XML => object ステップの結果を tt ファイルに渡す方法がわかりません。

私のttファイル:

<#@ template language="C#" debug="true" hostSpecific="false" #>
<#@ output extension=".cs" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #> 
<#
#>
using System;

namespace RWT.Direct.Core.Public.Servers
{
    public partial class ServerClass
    {
        public void CanYouSeeMe()
        {
            Console.WriteLine("this should be from a property");
        }
    }
}

部分クラス (通常の .cs):

namespace RWT.Direct.Core.Public.Servers
{
    public partial class ServerClass : ServerTemplate
    {
        public string MyParameter;
    }
}

呼び出しコード:

ServerClass sc = new ServerClass();
sc.MyParameter = "abc"; // set property
String pageContent = sc.TransformText();
Console.WriteLine(pageContent); // compile step goes here

実装では、プロパティは List 型になります。

これを正しく行うにはどうすればよいですか?

4

2 に答える 2

1

生成されたテンプレートクラスを拡張する以外に、別のオプションがあります。

<#@ parameter #>ディレクティブ(msdn )を見てください。このディレクティブt4を使用すると、テンプレートコード内でアクセスできるプロパティが自動的に生成されます。

<#@ template #>
<#@ parameter name="parameter" type="System.String" #>

// value of the parameter <#= this.parameter #>

テンプレートインスタンスを作成するときに、テンプレートセッションを介してこのプロパティを設定できます。

var instance = new Template(); // replace Template with your template's class name
instance.Sesion = new Dictionary<string, object>();
instance.Session.Add("parameter", "this should be from a property");
instance.Initialize();

var result = instance.TransformText();

// compile your result here
于 2013-03-10T11:59:56.270 に答える
0

私はここから部分的にそれを理解しました。

于 2013-03-09T23:30:59.363 に答える