2014-04-27 60 views
1
System.MissingMethodException: Method not found: 
    'System.Collections.Generic.List`1<!!0> 
    BusinessEntities.Helper.Sort(System.Func`2<!!0,!!0>)' 

我在網站的某個頁面上看到此錯誤。使用visual studio web部署項目準備網站構建。當我在IIS中部署構建並運行該頁面時,出現上述錯誤。當網站在Visual Studio中以調試模式運行時,它執行得很好。獲取System.MissingMethodException,用於對通用列表進行排序的擴展方法

背景: 我有一個asp.net 4.0網站,它引用了BusinessEntities項目,這是一個.NET 3.5類庫項目。該項目包含一個公共靜態Helper類,該類具有擴展方法Sort,用於對通用對象列表進行排序。 Helper類位於BusinessEntities名稱空間中。

如果我將BusinessEntites項目的版本更改爲.Net 4.0,然後構建網站,則不會出現此錯誤。由於某些操作限制,該項目無法升級到4.0。

所有這些奇怪的是,通用的擴展方法和網站和項目結構已經在解決方案,因爲一年以上沒有任何問題。我無法理解爲什麼這個錯誤突然出現。

回答

2

A MissingMethodException意味着您正在加載的dll的版本不同於您在構建期間引用的版本,並且您正在加載的實際dll(運行時)沒有編譯器找到的方法(在編譯時)。

檢查你沒有以某種方式獲得項目中引用的相同dll的不同版本。這可能是,當你在調試模式下運行它時,其他一些代碼會首先加載正確的dll,但是在發佈時運行時,由於引用不匹配而導致加載了不同的dll,或者在某處可能有多個版本。

+0

該網站擁有對BusinessEntities項目的項目引用。我檢查了BusinessEntities.dll的日期時間戳,並且它與項目的當前時間戳相匹配。我甚至嘗試將項目構建中的最新dll替換爲網站構建。仍然沒有工作。在構建中沒有其他同名的dll。如果我從頁面註釋掉排序方法,它的工作沒有問題。這意味着BusinessEntites項目中的其他類可以在構建中訪問。另外,我想知道爲什麼,當我將項目目標框架更改爲4.0時,不會出現此問題。 – drj

+0

您是否嘗試刪除所有引用,dll並重新編譯?任何機會,DLL可能在GAC中? –

+0

是的,已嘗試刪除,清理解決方案和重建。我沒有將項目dll添加到GAC。但是在GAC中檢查,只是爲了確保它不在那裏。甚至嘗試刪除臨時的asp.net文件。 – drj

-1

我面臨同樣的問題,我一直在使用下面的步驟固定... 1.清潔你的解決方案 2.手動清潔bin文件夾 3.刪除臨時文件夾 4.重建方案。