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

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

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

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

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

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

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

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

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