每當我構建一個特定的解決方案時,我會在錯誤中得到一個隨機數量的「一個表達式太長或者很難編譯」列表窗口。但是,錯誤指向的唯一項目是特定項目,而不是項目中的文件或特定的LOC。構建錯誤:「一個表達式太長或者編譯起來很複雜」
當我遇到這個,我'乾淨',然後我重新啓動VS,似乎修復它。任何想法是什麼導致這個?
這個特殊的解決方案有50個項目。
每當我構建一個特定的解決方案時,我會在錯誤中得到一個隨機數量的「一個表達式太長或者很難編譯」列表窗口。但是,錯誤指向的唯一項目是特定項目,而不是項目中的文件或特定的LOC。構建錯誤:「一個表達式太長或者編譯起來很複雜」
當我遇到這個,我'乾淨',然後我重新啓動VS,似乎修復它。任何想法是什麼導致這個?
這個特殊的解決方案有50個項目。
僅供參考,該錯誤是編譯器用盡堆棧空間的特徵。通常,當你在編譯器拋出一個「深遞歸」的問題,比方說像這種情況發生,
int x = (1 + (1 + (1 + (1 + ......... + 1) + 1) + 1) + 1);
說,數千名深。語法和語義分析器都是遞歸下降分析器,因此在極端情況下容易耗盡堆棧空間。
我不知道爲什麼關機和重新開始會影響到,但。這真的很奇怪。
如果您得到一個可靠的repro,我很樂意看到它。要麼將它發佈到此處,要麼在Connect上輸入一個錯誤,然後我們來看看它。儘管很難說出這裏發生了什麼,但沒有一個可靠的反饋。
爲什麼堆棧溢出錯誤至少指向正確的區域? (我確信這有一個很好的理由) – configurator
@configurator:你想使用哪個調用堆棧來調用錯誤分析過程?當我在編寫腳本時,我們經常遇到這個問題;我們會用盡堆棧並調用瀏覽器來告訴它顯示「堆棧」錯誤,當然這會再次用完堆棧*。 Windows不會對線程運行超出堆棧兩次的程序提供友好的幫助,我向你保證。在C#編譯器中,當我們用完堆棧時,我們只是恐慌和放鬆到頂層處理程序;當我們解開時,「我們所在的地方」就會消失。 –
@Eric我假設每個棧都有一個heaf被引用對象,它持有當前文件(和行,但可能有點太貴)正在處理和更新,而同時進行將足以讓錯誤消息可能是一個更具體的。或者當你這樣做時,你遞歸到代表潛在不同文件的多個不同「對象」。 – ShuggyCoUk
如果清理和重建工作,它顯然不是你的代碼的問題。你應該向微軟報告這個,看起來像是一個VS錯誤。
我從來沒有在野外見過這個。
然而,從它周圍的谷歌搜索可能是由過量集引用,一個特定的報價:
If I reduce number of referenced assemblies to 5500 it is compiled and working
現在,毫無疑問,你會注意到的依賴清單大,你能檢查是否你有大量的程序集引用?
任何人都可以引用5千個程序集? – svick
剛剛檢查;它看起來不是太大。那個人是指5500個單獨的程序集?或者只是將每個項目中的程序集數量加起來並計算重複項,如System,System.XML等? –
我得到這個錯誤,我相信出於同樣的原因,我只引用63程序集。 –
在構建時,您可以看到構建輸出在失敗之前檢查的最後一個文件夾。我刪除了該文件夾中的文件,並將它們逐一帶回。終於找到了問題。我不知道它到底是什麼,但它是一個帶有大量HTML的.aspx頁面。它沒有經常使用,所以我只是從項目中刪除它,現在編譯。
我在一個項目這個錯誤,當我從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"}
}
}
}
}
謝謝你,你救了我的命。 –
這也解決了我的問題。我有一個列表
67k行,這解決了它。 – odyth
我今天拿到了這個問題。不知何故,我在我的index.cshtml
文件中得到了非常長的字符串。因此,檢查可能導致此問題的長字符串。
我得到這個錯誤導致非常大的svg文件。和谷歌它和一些個人的實驗後,我發現,對於大SVG文件的解決方案是:
@Html.Raw(File.ReadAllText(Server.MapPath("~/image.svg")))
在剃刀文件存在與HTML部分可惜這一招並不大SVG文件工作的另一種方法。
希望這有助於..
我在64位機器有同樣的問題(VS 2012)。
我用@ MikeFlynn的答案來找到導致錯誤的文件夾。
最後,我發現我有一個沒有代碼的Help.aspx頁面背後 - 只是HTML 但它有嵌入作爲基地64
<img src="data:image/png;base64 ... />
我把它轉換成靜態的HTML,它編譯多個圖標圖像。
P.S.同一個項目正在編譯O.K.在一個32位VS2012機器中。 兩臺機器都運行Windows 7.
您是否有任何可能干擾編譯的插件/擴展? – drharris
我目前已安裝,啓用和更新了「轉到定義」和「生產力電動工具」。 –
我不能忍受處理超過6個項目/解決方案...我感到很多痛苦給你。 – 2011-11-16 20:08:14