You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YamlDotNet桌面端保留0x0D但Xamarin Android端丢失的问题求助

解决YamlDotNet跨平台生成许可证时Android端丢失0x0D的问题

问题根源是不同平台的换行符默认行为差异:Windows桌面端默认用CRLF(0x0D+0x0A),而Xamarin Android端默认用LF(0x0A),YamlDotNet的Save方法会依赖写入器的NewLine属性生成换行,导致两端输出不一致。

要强制在Android端保留0x0D字符,需要手动指定所有写入器的NewLine为"\r\n"(即CRLF),具体修改代码如下:

public void GenerateLicense()
{
    var yamlStream = new YamlStream(
          new YamlDocument(
              new YamlMappingNode(
                  new YamlScalarNode("XXXXXXXXXXXXXLic"), new YamlMappingNode(
                      new YamlScalarNode("CustomerName"), new YamlScalarNode("Yo"),
                      new YamlScalarNode("CustomerEmail"), new YamlScalarNode("yo@yo.yo"),
                      new YamlScalarNode("HardwareID"), new YamlScalarNode("yo"),
                      new YamlScalarNode("Signature"), new YamlScalarNode()
                      )
                  )
              )
      );

    string yaml;
    var buffer = new StringBuilder();
    // 手动设置StringWriter的NewLine为CRLF
    using (var writer = new StringWriter(buffer) { NewLine = "\r\n" })
    {
        yamlStream.Save(writer, false);
        yaml = writer.ToString();
    }

    var checksum = StringToHex(MD5CheckSumStr(yaml));

    var input = new StringReader(yaml);
    yamlStream = new YamlStream();
    yamlStream.Load(input);

    var mapping = (YamlMappingNode)yamlStream.Documents[0].RootNode;
    ((YamlScalarNode)mapping.Children["XXXXXXXXXXXXXLic"]["Signature"]).Value = checksum;

    // 改用StreamWriter并指定NewLine为CRLF,替代File.CreateText
    using (var writer = new StreamWriter("../yo.yaml", false, Encoding.UTF8) { NewLine = "\r\n" })
    {
        yamlStream.Save(writer, false);
    }
}

关键修改点:

  • 实例化StringWriter时,显式设置NewLine = "\r\n",确保内存中生成的YAML字符串用CRLF换行。
  • 保存到文件时,使用StreamWriter替代File.CreateText,同样设置NewLine = "\r\n",强制写入文件时保留0x0D字符。

这样修改后,桌面端和Android端生成的许可证文件都会包含0x0D回车符,保证跨平台输出一致。

内容的提问来源于stack exchange,提问作者Freedom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:40:31