C#编译错误:"没有剩余的逻辑空间来创建更多的用户字符串"

Rom*_*kov 8 .net c#

我正在尝试编译一个一次性的"脚本",一个自动生成的C#程序.该程序包含120,000个不同的字符串文字.C#编译器无法构建它,说:

Unexpected error writing metadata to file '<removed>' -- 'No logical space left to create more user strings.'
Run Code Online (Sandbox Code Playgroud)

.NET中是否存在对模块中字符串文字数量的硬性限制?这个限制是什么?它有什么办法吗?

Mar*_*wis 12

有对字符串的在装配数量的限制,就像有上的类的数量限制,字段等每个这些是确定与一个32位的元数据标记,其中所述最上面的一个字节是一个元类型代码,低位是单独的数据记录.对于字符串,它们实际上标识了字符串堆中的偏移量,因此对于字符串,最多可以有2**24个字节,即16MiB.不确定字符串是以UTF-8还是UTF-16存储.


pax*_*blo 7

我不知道.NET的限制是什么,但是,如果它是一个资源限制,我会解决它,就像我们在糟糕的旧64K段时间解决空间耗尽一样.

外化字符串 - 将它们放在外部文件中并简单地存储偏移量(如果它们不是空终止则为长度).当您需要一个字符串时,从文件中加载它并使用它.