2011-11-16 72 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.

相關問題