构建错误:“表达式太长或太复杂,无法编译”

每当我构建一个特定的解决方案时,我会在错误列表窗口中随机获得一个“表达式太长或者很复杂”。 但是,错误指向的唯一项是特定项目,而不是项目中的文件或特定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嵌入