Geekiodと同様に、私はXSDを使用しました。ここにT4のセットアップがあります:
T4ソリューションにMyObject.xmlファイルがあります。
(私はMyObject.xmlスキーマを変更したときまたは更新)MyObject.xmlからMyObject.csを発生させるために、私はこのコウモリのスクリプトを実行します。
cd C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
xsd "C:\Users\XXXX\Documents\Visual Studio 2012\Projects\XXXXX.Templates\XXXXX.Templates.CodeGenerator\MyObject.xml"
xsd "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\MyObject.xsd" /c
xcopy /s "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\MyObject.cs" "C:\Users\XXXXX\Documents\Visual Studio 2012\Projects\XXXXX.Templates\XXXXXX.Templates.Common"
これは、Microsoft SDKが提供するXSDプログラムを実行します.xmlファイルに保存します。 XSDは.xsdファイルを生成します。 XSDを新しい.xsdファイルで再度実行すると、.csファイルが作成されます。すべて同じ名前です。スクリプトは、.csファイルをSDKフォルダからプロジェクトにコピーします。
これで、xml文書に基づいて.csの厳密に型指定されたファイルが作成されました。あなたは今、このようなあなたの.ttファイルにクールなものを行うことができます。
<#@ parameter name="XmlFileName" type="System.String" #>
<#
XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
StreamReader sr = new StreamReader(this.XmlFileName);
MyObject O = (MyObject)serializer.Deserialize(sr);
#>
using System;
public class <#= O.Name #> : BusinessObjectBase<<#= O.Name #>Data>
{
#region Construction
private <#= O.Name #>() : base(true) {}
/// <summary>
/// Initializes a new instance of the <#= Utility.GetRefClassName(O.Name) #> class.
/// </summary>
/// <param name="data"></param>
<#= Utility.GetRemarksComment2(O) #>
internal <#= O.Name #>(<#= O.Name #>Data data) : base(data) {}
#endregion
#region <#= O.Name #> Data
<#
// Generate a property for each child.
foreach (MyObjectProperty objProp in O.Property)
{
if (objProp.GetAccess == "public")
{
objProp.GetAccess = "";
}
else
{
objProp.GetAccess = objProp.GetAccess + " ";
}
if (objProp.SetAccess == "public")
{
objProp.SetAccess = "";
}
else
{
objProp.SetAccess = objProp.SetAccess + " ";
}
#>/// <summary>
...
を私は「[XMLファイル」変数が結ばれている.ttファイルオフコードを生成するために、私のT4ソリューションを実行するにはTextTemplatingSessionクラスに追加します。これは、その後、私は(MyOtherObject.xml、customer.xmlを、など)たいものは何でもMyObject.xmlファイルをポイントすることができます:
static void RunThroughSession()
{
string objectName = "MyObject";
var template = Activator.CreateInstance<BusinessObjectTemplate>();
TextTemplatingSession session = new TextTemplatingSession();
session["XmlFileName"] =
@"C:\Users\XXXXX\Documents\Visual Studio 2012\Projects\XXXXXX.Templates\XXXXXX.Templates.CodeGenerator\" + objectName + ".xml";
template.Session = session;
template.Initialize();
string outputText = template.TransformText();
using (StreamWriter sr = new StreamWriter(
@"C:\Users\XXXXX\Documents\Visual Studio 2012\Projects\XXXXX.Templates\XXXXXX.Templates.CodeGenerator\GeneratedCode\BusinessObject" + objectName + ".cs"))
{
sr.Write(outputText);
}
本の最後のピースは、あなたが「カスタムツール」を変更する必要がありますオプションを.ttファイルプロパティから "TextTemplatingFilePreprocessor"に変更します。デフォルトは "TextTemplatingGenerator"のようなもので、この設定では動作しません。
希望すると便利です。