gpt4 book ai didi

.net - 我可以使用 T4 将原始字节写入输出吗?

转载 作者:行者123 更新时间:2023-12-02 01:19:53 25 4
gpt4 key购买 nike

我经常使用 T4 模板,但仅限于基于文本的文件(毕竟 T 之一代表文本)。

但是,我现在有一个场景,在图像上使用它是有益的 - 读取图像,用它做一些事情,然后写回。 (如果可能的话,我希望避免 msbuild-tasks 或 postbuild 应用程序,因为 T4 可以很好地集成到 Visual Studio 和源代码管理中)。

但是,即使设置 <#@ output extension=".png" encoding="ASCII" #> ,生成的文件中没有确切的字节,可能是因为将字节转换为字符或字符串会导致转换改变它。

有什么办法可以做到这一点吗?我不想做File.WriteAllBytes因为这不能很好地与源代码管理一起工作。

最佳答案

我们的 T4 模板有一个公共(public)基类 ( <#@ template language="C#" inherits="MySpecialBaseForT4s"... )。我们添加了 WriteBinary(byte[] data)该基类的 protected 方法,允许我们的 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() 的逻辑在生成的字符串中查找已知的 header ,并将该字符串转回字节数组以写入磁盘。

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);
}

这有帮助吗?

关于.net - 我可以使用 T4 将原始字节写入输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com