构建错误:“表达式太长或太复杂,无法编译”
每当我构建一个特定的解决方案时,我会在错误列表窗口中随机获得一个“表达式太长或者很复杂”。 但是,错误指向的唯一项是特定项目,而不是项目中的文件或特定LOC。
当我遇到这个时,我’干净’,然后我重启VS,这似乎解决了它。 关于是什么导致这个的任何想法?
这个特殊的解决方案有50个项目。
仅供参考,该错误是编译器耗尽堆栈空间的特征。 通常,当您在编译器中抛出“深度递归”问题时会发生这种情况,例如,
int x = (1 + (1 + (1 + (1 + ......... + 1 ) + 1 ) + 1 ) + 1);
说,几千深。 语法和语义分析器都是递归下降分析器,因此在极端情况下容易耗尽堆栈空间。
我不知道为什么关闭和重新启动会影响到这一点。 这真的很奇怪。
如果你得到一个坚实的复制品,我很乐意看到它。 要么在这里发布,要么在Connect上输入一个错误,我们会看看它。 没有坚实的复制品虽然很难说这里发生了什么。
当我从Visual Studio 2012切换到Visual Studio Community 2013时,我在一个项目中出现此错误。在我的情况下,它是巨型文件(25k行,不是由我编写),其中List
由集合初始化程序初始化。
像这样的东西:
public class Class { public List BigList { get { return new List() { new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, . . . . . new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"} } } } }
我将其更改为string[][]
并且项目开始编译
public class Class { public string[][] BigList { get { return new string[][] { new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, . . . . . new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"}, new string[]{"foo","bar"} } } } }
构建时,您可以看到构建输出它在失败之前检查的最后一个文件夹。 我删除了该文件夹中的文件并逐个将它们带回来。 终于找到了问题。 我不确切知道它是什么,但它是一个包含大量HTML的.aspx页面。 它经常使用,所以我只是从项目中删除它,现在它编译。
如果清理和重建有效,那么代码显然不是问题。 你应该向微软报告,这似乎是一个VS bug。
我从来没有在野外看过这个。
然而,从谷歌搜索它可能来自过多的程序集引用,一个特别的引用:
如果我将引用的程序集的数量减少到5500,那么它将被编译并正常工作
现在,当然,你会注意到一个很大的依赖列表,你可以检查你是否引用了过多的程序集?
我今天遇到了这个问题。 不知怎的,我的index.cshtml
文件中有一个非常长的字符串。 因此,请检查可能导致此问题的长字符串。
我得到这个错误导致非常大的svg文件。 谷歌和一些个人实验后,我发现大svg文件的解决方案是:
@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg")))
在剃刀文件中有另一种方法与html部分但不幸的是这个技巧不适用于大svg文件。
希望这有帮助..
我在64位机器(VS 2012)中遇到了同样的问题。
我用@ MikeFlynn的答案找到导致错误的文件夹。
最后我发现我有一个没有代码的Help.aspx页面 – 只是HTML但它有多个图标图像作为基础64嵌入
- 当InstanceContextMode设置为PerSession时,如何为所有客户端运行一次WCF服务构造函数?
- 有没有办法全局更改wpf中绑定的默认行为?
- ListBox的简单WPF DataBinding到字符串的ObservableCollection
- WebBrowser控件和Adobe Flash内容
- Func 的List ,使用generics返回类型编译错误,但为什么呢?
- 无法打开下载保存对话框
- 如何在.NET中使用CNG(或AES-NI启用的指令集)?
- 为什么我的Catch块仅在Visual Studio中进行调试时运行?
- System.MethodAccessException:尝试通过安全透明方法访问安全性关键方法在所有应用程序上失败