2013-02-20 17 views
11

我在我的web應用程序中偶爾會看到以下錯誤(看起來隨機)。我們正在運行Windows Server 2008 R2,IIS 7.5,MVC3,.NET 4.5。定期看到ASP.NET錯誤CS0656:缺少編譯器所需的成員

Compiler Error

這是同樣的錯誤每次:CS0656:缺少編譯器要求會員「Microsoft.CSharp.RuntimeBinder.Binder.BinaryOperation」

出現此錯誤時,它可以從一個帶走任何東西重新啓動應用程序池,重新安裝我們的應用程序本身,以解決它。

錯誤發生在全新的VM映像(以前沒有安裝過我們的軟件)以及之前安裝過我們的軟件的機器上。該錯誤可能發生在應用程序第一次運行時,或者當應用程序已經足夠長時間讓IIS應用程序池回收工作進程時(似乎是這樣)。

這變得很難處理,因爲我已經對這個錯誤進行了大量的研究,並嘗試了多種解決方案,沒有運氣。而且,發生錯誤的隨機頻率使得診斷非常困難。任何對這個問題的洞察,或對可能的解決方案的想法,將不勝感激。我願意嘗試幾乎所有的事情。

+0

1)你可以附加一個調試器之一的測試虛擬機,並使其崩潰? 2)你在使用DLR嗎?通過BCL源文件查看,看起來類型名稱與動態操作相關聯。或者也許是MVC使用DLR? – 2013-04-05 23:10:09

+0

你可以檢查使用的是什麼版本的Microsoft.CSharp.dll(使用諸如procexp之類的工具確定路徑),使用諸如.NET Reflector之類的工具打開它,並檢查BinaryOperation靜態方法是否存在?這可能是版本問題(編譯器期望更新版本的Microsoft.CSharp.dll) – 2013-04-06 07:05:08

+0

您是否使用C#動態語言功能?無論如何,它看起來像一個CLR損壞。 – 2013-04-12 08:04:38

回答

0

Try Forest Cheng Answer:

什麼版本的.NET框架是什麼? ASP.NET MVC 3運行時組件需要.NET Framework版本4和Visual Studio 2010或Visual Web Developer 2010 Express。想了解更多信息,請看ASP.NET MVC 3 Release Notes

編譯器錯誤CS0656可以通過後續的問題引起:

  1. 你的公共語言運行庫的安裝已損壞。

  2. 您有一個程序集引用,它定義了在公共語言運行庫中也可以找到的類型。但是,你的程序集的類型並不是C#編譯器期望的方式。

因此請檢查您的引用以確保您使用的是正確版本的公共語言運行庫。

0

我們曾經有這些編譯錯誤在很久以前隨着.net 1及以後版本隨機返回。這需要刪除臨時asp.net文件夾的內容,並且發現其他流氓DLL,即使在Visual Studio緩存中也是如此。一般來說,刷新臨時的asp.net文件夾將做到這一點。

確保你找到所有dll - bin文件夾太明顯了,並且記住dll是從影子目錄執行的。這就是爲什麼我記得(也從一個遙遠的記憶),有一個連接到默認appdomain程序集加載到,特別是如果你然後加載「相同的程序集」,但從不同的文件位置。

相關問題