当社のT4テンプレートは、共通の基底クラス(<#@ template language="C#" inherits="MySpecialBaseForT4s"...
)を持っています。その基本クラスにWriteBinary(byte[] data)
という保護されたメソッドを追加し、T4テンプレートが例えばzipファイルを生成し、CompiledTemplate.Process()
メソッドを呼び出す私たちのシステムの部分に渡すことを可能にしました。
public abstract class MySpecialBaseForT4s: TextTransformation
{
protected void WriteBinary(byte[] binaryData)
{
string base64EncodedZip = Convert.ToBase64String(binaryData);
Write(BASE64_HEADER);
Write(base64EncodedZip);
}
public const string BASE64_HEADER = "Content-Transfer-Encoding: base64\n";
}
CompiledTemplate.Process()
を起動ロジックが生成された文字列内の既知のヘッダを探し、バックディスクに書き込むためのバイト配列に文字列をオンにします。
string content = myTemplate.Process();
if (content.Trim().StartsWith(MySpecialBaseForT4s.BASE64_HEADER))
{
string contentWithoutBase64Hdr = content.Trim().Replace(MySpecialBaseForT4s.BASE64_HEADER, "");
byte[] binaryContent = Convert.FromBase64String(contentWithoutBase64Hdr);
File.WriteAllBytes(filenameAndExtension, binaryContent);
}
これは役に立ちますか?
出典
2012-08-30 12:36:34
gap