Наши шаблоны 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);
}
Это помогает?