Pai*_*rdo 5 c# string visual-studio-2015
当我向返回长字符串的类添加静态字符串属性时,我收到此错误。
在同一个项目中,我添加了许多超过 20k 个字符的字符串属性,但是当我创建另一个返回字符串的属性并构建项目时,我收到此错误。
我怎样才能增加这个限制?我尝试使用 Stringbuilder 但同样发生了。
只是想把我最近的经历带到桌面上。
如果您在网上搜索 CS8103 错误,则没有太多信息。而且大多数信息并不完全准确。
我们昨天在一个大型 C# 解决方案中遇到了这个问题。
据我了解这个编译错误,问题是所有编译时定义的字符串连接的总长度。
我将其解释为编译器将所有字符串放入一个海量数据块中,然后当引用给定字符串时,它会索引到这个(或类似的)中。
因此,请尝试将其理解为在 cs 文件中定义的所有字符串 - 连接为一个。如果这个字符串变得太大 - 我们会冒运行时错误的风险,正如上面 Roslyn 问题所解释的那样。
代码中的所有字符串,所有在双引号内的都算数。
public void Main() {
Console.WriteLine("test");
string test = "AnotherTest" + " " + "run";
}
Run Code Online (Sandbox Code Playgroud)
像上面这样的程序有 4 + 11 + 1+ 3 = 19 => "testAnotherTest run"
我们的程序集昨天在将功能分支合并到 master 时达到了限制。那是使杯子滚过的著名滴。
似乎没有解决方法,而是将大型程序集拆分为较小的部分,或者将大块字符串移动到资源或其他外部文件中。
我们通过注释掉大部分遗留代码来验证这一点 - 我们可以再次编译。
我们的解决方案是重构大型装配体中的特定区域,并为此创建一个新装配体。
我知道,太多的文字 - 但我认为这值得一个彻底的解释,因为很难找出导致问题的原因。
考虑到其他地方的稀疏信息,这不是一个常见问题。但是它会停止生产线,并且在解决方案确定之前没有人可以编译。
I guess its a new compiler in VS2015, which restricts too much use of string literals.
See EmitErrorTests line 329: http://source.roslyn.codeplex.com/#Roslyn.Compilers.CSharp.Emit.UnitTests/Emit/EmitErrorTests.cs
The solution is to not overflow your heap. Try to get the total memory your program (if its already using too much) by
long totalHeapMemoryUsed = GC.GetTotalMemory(false);
Run Code Online (Sandbox Code Playgroud)
Try to not use static strings, but limit it to local scopes (function or class scope), or use Resources.
| 归档时间: |
|
| 查看次数: |
8095 次 |
| 最近记录: |