代码之家  ›  专栏  ›  技术社区  ›  Roman Starkov

C#编译错误:“没有逻辑空间来创建更多用户字符串”

  •  8
  • Roman Starkov  · 技术社区  · 16 年前

    Unexpected error writing metadata to file '<removed>' -- 'No logical space left to create more user strings.'
    

    3 回复  |  直到 16 年前
        1
  •  12
  •   Martin v. Löwis    16 年前

    程序集中的字符串数量有限制,就像类、字段等的数量有限制一样。每个都用32位标识 metadata token ,其中最高位字节是元类型代码,低位是单个数据记录。对于字符串,它们实际上标识了字符串堆中的偏移量,因此字符串最多只能有2**24个字节,即16MiB。不确定字符串是以UTF-8还是UTF-16存储的。

        2
  •  7
  •   paxdiablo    16 年前

    我不知道极限在哪里。NET,但如果这是资源限制,我会用我们在糟糕的64K分段时代解决空间不足的方法来解决。

    将字符串外部化-将它们放在外部文件中,并简单地存储偏移量(以及长度,如果它们不是以null结尾的)。当你需要一个字符串时,从文件中加载它并使用它。

        3
  •  2
  •   paxdiablo    16 年前

    我以前从未遇到过这种情况,但有一些信息和建议的解决方案 MSDN

    然而,除非你有充分的理由使用硬编码的字符串文字,否则你可能应该考虑对大多数字符串使用资源文件而不是文字。