每当我构建一个特定的解决方案时,我会在Error List窗口中随机获得一个“表达式太长或者很复杂”。但是,错误指向的唯一项是特定项目,而不是项目中的文件或特定的LOC。
当我遇到这个时,我'干净',然后我重启VS,这似乎解决了它。关于导致这种情况的任何想法?
此特定解决方案中包含50个项目。
答案 0 :(得分:15)
仅供参考,该错误是编译器耗尽堆栈空间的特征。通常,当您在编译器中抛出“深度递归”问题时会发生这种情况,例如
int x = (1 + (1 + (1 + (1 + ......... + 1 ) + 1 ) + 1 ) + 1);
说,数千深。语法和语义分析器都是递归下降分析器,因此在极端情况下容易耗尽堆栈空间。
我不知道为什么关闭和重新开始会影响到这一点。这真的很奇怪。
如果你得到一个坚实的复制品,我很乐意看到它。要么在这里发布,要么在Connect上输入一个错误,我们会看看它。没有坚实的复制品,虽然很难说这里发生了什么。
答案 1 :(得分:4)
当我从Visual Studio 2012切换到Visual Studio Community 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"}
}
}
}
}
答案 2 :(得分:2)
构建时,您可以看到构建输出它在失败之前检查的最后一个文件夹。我删除了该文件夹中的文件并逐个将它们带回来。终于找到了问题。我不确切知道它是什么,但它是一个包含大量HTML的.aspx页面。它经常使用,所以我只是从项目中删除它,现在它编译。</ p>
答案 3 :(得分:1)
如果清洁和重建工作正常,那么代码显然不是问题。您应该向Microsoft报告,这似乎是一个VS错误。
答案 4 :(得分:0)
我从未在野外见过这种情况。
然而,从谷歌搜索它可能来自过多的汇编参考,一个特别的引用:
如果我将引用的程序集数量减少到5500,那么它就会被编译并正常工作
现在,当然,你会注意到一个很大的依赖列表,你能检查一下你是否引用了过多的程序集吗?
答案 5 :(得分:0)
我得到了这个错误导致非常大的svg文件。谷歌和一些个人实验后,我发现大svg文件的解决方案是:
@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg")))
在razor文件中有另一种方法使用html partial但不幸的是这个技巧不能用于大svg文件。
希望这有帮助..答案 6 :(得分:0)
我在64位计算机上遇到了同样的问题(VS 2012)。
我使用@ MikeFlynn的答案来找到导致错误的文件夹。
最后我发现我有一个没有代码的Help.aspx页面 - 只是HTML 但它有多个图标图像作为基础64嵌入
<img src="data:image/png;base64 ... />
我将其转换为静态HTML并进行了编译。
P.S。同一个项目正在编制O.K.在32位VS2012机器中。 两台机器都运行Windows 7。
答案 7 :(得分:0)
我今天在Visual Studio 2019中遇到了这个问题。我的字符串很长
<img height="445" src="data:image/png;base64,iVBORw...
在我的file.aspx文件中。 vs2019中甚至较长的图像也可能导致此问题。
答案 8 :(得分:0)
我可以和我们分享这个错误的经验。典型的Microsoft杰作(或仅仅是一件杰作...)我们的问题实际上是由于IIS无法编译太多的DLL。诊断它很痛苦(因为不存在诊断方法)。从主BIN文件夹中删除一些不必要的DLL(例如单元测试DLL)已经解决了这个问题。走吧...
答案 9 :(得分:0)
当从 IDE 运行时,应用程序运行良好,在托管到 IIS 时,在尝试了基于图像和 base64 等给出的许多步骤后,出现了上述错误。以下发布 web.config 上的设置对我有用,较早的 debug = "true" 已设置,使其为 false,并且它起作用了。
<compilation debug="false" defaultLanguage="c#" maxBatchGeneratedFileSize="1000" maxBatchSize="1000" targetFramework="4.5">
答案 10 :(得分:0)
这周我遇到了同样的问题。它发生在电子邮件生成模块中。以前它运行良好,我有点失望。好的旧服务器重启修复了问题¯_(ツ)_/¯