2011-11-16 118 views
11

每当我构建一个特定的解决方案时,我会在错误中得到一个随机数量的“一个表达式太长或者很难编译”列表窗口。但是,错误指向的唯一项目是特定项目,而不是项目中的文件或特定的LOC。构建错误:“一个表达式太长或者编译起来很复杂”

当我遇到这个,我'干净',然后我重新启动VS,似乎修复它。任何想法是什么导致这个?

这个特殊的解决方案有50个项目。

+0

您是否有任何可能干扰编译的插件/扩展? – drharris

+0

我目前已安装,启用和更新了“转到定义”和“生产力电动工具”。 –

+0

我不能忍受处理超过6个项目/解决方案...我感到很多痛苦给你。 – 2011-11-16 20:08:14

回答

14

仅供参考,该错误是编译器用尽堆栈空间的特征。通常,当你在编译器抛出一个“深递归”的问题,比方说像这种情况发生,

int x = (1 + (1 + (1 + (1 + ......... + 1) + 1) + 1) + 1); 

说,数千名深。语法和语义分析器都是递归下降分析器,因此在极端情况下容易耗尽堆栈空间。

我不知道为什么关机和重新开始会影响到,但。这真的很奇怪。

如果您得到一个可靠的repro,我很乐意看到它。要么将它发布到此处,要么在Connect上输入一个错误,然后我们来看看它。尽管很难说出这里发生了什么,但没有一个可靠的反馈。

+0

为什么堆栈溢出错误至少指向正确的区域? (我确信这有一个很好的理由) – configurator

+0

@configurator:你想使用哪个调用堆栈来调用错误分析过程?当我在编写脚本时,我们经常遇到这个问题;我们会用尽堆栈并调用浏览器来告诉它显示“堆栈”错误,当然这会再次用完堆栈*。 Windows不会对线程运行超出堆栈两次的程序提供友好的帮助,我向你保证。在C#编译器中,当我们用完堆栈时,我们只是恐慌和放松到顶层处理程序;当我们解开时,“我们所在的地方”就会消失。 –

+0

@Eric我假设每个栈都有一个heaf被引用对象,它持有当前文件(和行,但可能有点太贵)正在处理和更新,而同时进行将足以让错误消息可能是一个更具体的。或者当你这样做时,你递归到代表潜在不同文件的多个不同“对象”。 – ShuggyCoUk

1

如果清理和重建工作,它显然不是你的代码的问题。你应该向微软报告这个,看起来像是一个VS错误。

0

我从来没有在野外见过这个。

然而,从它周围的谷歌搜索可能是由过量集引用,一个特定的报价:

If I reduce number of referenced assemblies to 5500 it is compiled and working

现在,毫无疑问,你会注意到的依赖清单大,你能检查是否你有大量的程序集引用?

+3

任何人都可以引用5千个程序集? – svick

+0

刚刚检查;它看起来不是太大。那个人是指5500个单独的程序集?或者只是将每个项目中的程序集数量加起来并计算重复项,如System,System.XML等? –

+0

我得到这个错误,我相信出于同样的原因,我只引用63程序集。 –

2

在构建时,您可以看到构建输出在失败之前检查的最后一个文件夹。我删除了该文件夹中的文件,并将它们逐一带回。终于找到了问题。我不知道它到底是什么,但它是一个带有大量HTML的.aspx页面。它没有经常使用,所以我只是从项目中删除它,现在编译。

enter image description here

enter image description here

4

我在一个项目这个错误,当我从Visual Studio 2012转换到Visual Studio 2013年社区在 我的情况是巨大的文件(25K线,不是我写的)有List<string[]>由集合初始值设定项初始化。

事情是这样的:

public class Class 
{ 

    public List<string[]> BigList 
    { 
     get 
     { 
      return new List<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"} 
      } 
     } 
    } 
} 

我把它改成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"} 
      } 
     } 
    } 
} 
+0

谢谢你,你救了我的命。 –

+0

这也解决了我的问题。我有一个列表与超过40,000+的单词,并得到该错误,并将其更改为一个字符串[]解决了错误! – MattyMerrix

+0

67k行,这解决了它。 – odyth

0

我今天拿到了这个问题。不知何故,我在我的index.cshtml文件中得到了非常长的字符串。因此,检查可能导致此问题的长字符串。

0

我得到这个错误导致非常大的svg文件。和谷歌它和一些个人的实验后,我发现,对于大SVG文件的解决方案是:

@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg"))) 

在剃刀文件存在与HTML部分可惜这一招并不大SVG文件工作的另一种方法。

希望这有助于..

0

我在64位机器有同样的问题(VS 2012)。

我用@ MikeFlynn的答案来找到导致错误的文件夹。

最后,我发现我有一个没有代码的Help.aspx页面背后 - 只是HTML 但它有嵌入作为基地64

<img src="data:image/png;base64 ... /> 

我把它转换成静态的HTML,它编译多个图标图像。

P.S.同一个项目正在编译O.K.在一个32位VS2012机器中。 两台机器都运行Windows 7.

相关问题