2011-11-16 40 views
11

これまでは、特定のソリューションをビルドすると、「式が長すぎたり、コンパイルするのが複雑です」というエラーがランダムに発生しますリストウィンドウ。ただし、エラーが指す唯一の項目は特定のプロジェクトであり、プロジェクト内のファイルや特定のLOCではありません。ビルドエラー:「式が長すぎるか、コンパイルするのが複雑です」

これが発生すると、私は「クリーン」にしてVSを再起動し、それが修正されたようです。これを引き起こしていることに関するアイデアはありますか?

この特定のソリューションには50個のプロジェクトがあります。

+0

コンパイルを妨げているかもしれないアドオン/拡張機能が有効になっていますか? – drharris

+0

私は現在、「Go To Definition」と「Productivity Power Tools」がインストールされ、有効にされ、更新されています。 –

+0

私は約6以上のプロジェクト/ソリューションを扱うことができません...私はあなたのために多くの痛みを感じる。 –

答えて

14

FYI、このエラーは、スタック領域を使い果たしたコンパイラの特徴です。通常、コンパイラで「深い再帰」問題が発生すると、たとえば、

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

と言います。シンタックスアナライザとセマンティックアナライザは両方とも再帰的降下アナライザであるため、極端なシナリオではスタック領域が不足する傾向があります。

なぜシャットダウンしてからやり直すのがそれに影響するか分かりません。それは本当に奇妙です。

もしあなたがしっかりしたレシピを得たら、私はそれを見たいと思う。ここに投稿するか、Connectにバグを入力すると、それを見ていきます。しかし、ここで何が起こっているのかを言うのは非常に難しいですが、堅実な説明はありません。

+0

スタックオーバーフローエラーが少なくとも正しい領域を指していないのはなぜですか? (確かにそれには正当な理由があると確信しています) – configurator

+0

@configurator:正確にどのコールスタックを使用してエラー解析プロシージャを呼びたいのですか?私たちはスクリプト作成に取り組んでいた頃、この問題に慣れていました。私たちはスタックを使い果たし、ブラウザに "out of stack"エラーを表示するように指示します。これは、もちろんスタックを使い果たしてしまいます*。 Windowsは、スレッド*が2回実行されるスレッドを持つプログラムには親切には向いていません。スタックを使い果たしたときのC#コンパイラでは、パニックを起こして最上位のハンドラに至るまで解き放つだけです。私たちが解き放たれるまでには、「どこにいたのか」が失われます。 –

+0

@エリック私は単純に、現在のファイル(および行が保持されているが、ビットが高すぎる可能性がある)を保持しているスタックごとにheaf参照オブジェクトを持っていて、処理中にそのオブジェクトを更新するだけでエラーメッセージがより具体的。あるいは、あなたがこれを行うときに潜在的に異なるファイルを表す複数の異なる「オブジェクト」に再帰していますか? – ShuggyCoUk

1

クリーニングと再構築が機能する場合は、明らかにコードに問題はありません。これをMicrosoftに報告してください.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

ビルド時に、失敗する前に最後にチェックしたビルド出力を見ることができます。私はそのフォルダ内のファイルを削除し、それらを1つずつ戻しました。最後に問題が見つかりました。私はそれが何であるかは正確にはわかりませんが、HTMLがたくさんある.aspxページでした。それは頻繁に使用されていなかったので、私はちょうどプロジェクトからそれを削除し、今コンパイルします。

enter image description here

enter image description here

4

私は私の場合はVisual StudioのコミュニティへのVisual Studio 2012から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ファイルのこのエラーが発生しました。そしてGoogleのそれと私は大きなSVGファイルのためのソリューションがあることがわかったいくつかの個人的な実験後:かみそりファイル内

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

部分が、残念ながら、このトリックは大きなSVGファイルで作業されていないHTMLで別のアプローチがあります。

願っています。

0

64ビットマシン(VS 2012)でも同じ問題がありました。

@ MikeFlynnの答えを使用して、エラーの原因となったフォルダを特定しました。

は最後に、私は私が背後にあるコードなしでHelp.aspxページを持っていた発見 - ちょうどHTML が、それは、私は、静的なHTMLに変換し、それをコンパイルベース64

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

として埋め込まれた複数のアイコンイメージを持っていました。

P.S.同じプロジェクトがO.Kをコンパイルしていました。 32ビットVS2012マシンで実行します。 両方のマシンがWindows 7を実行していました。