2010-09-30 99 views
12

我遇到了上述異常的問題。我有一個相對簡單的結構分開在兩個DLL中。C#「未找到方法」異常運行時不使用反射

第一個包含一個帶有基本實現的IEntityService,IEntity。第二個包含實際的實現以及接口。所以有一個IMachine服務實現了IEntityService和MachineService,它實現了IEntityService和EntityService。類似的情況發生在Result集合(實體加服務)上。此外,服務(機器和結果)是部分類/接口,其中一個類是自動生成的。

現在在ResultMachine的其中一箇中,我試圖獲取一臺機器,並且在它不存在的情況下,我正在創建它並保存。但是,當我試圖保存時,我試圖從EntityService類訪問保存方法時,得到了「找不到方法」。但是,如果我在一個MachineService中包裝EntityService.Save方法,它沒有任何異常。

被修改:

不是必需的代碼。該決議是重新鏈接參考。什麼誤導我,我的DLL不在GAC中,它與VS.更重要的是它沒有強烈的簽名,唯一的區別是版本號。

+2

你可以發佈實例化你的'ResultMachine'的代碼,你嘗試使用的接口和實現嗎? – Oded 2010-09-30 18:34:26

回答

6

我的第一個直覺是檢查以確保程序集包含缺少方法的類。我想它有可能沒有立即更新程序集?

9

我們有這個錯誤幾次,你可以按如下重現問題:

  • 創建的項目有2 DLL的(比如程序的DLL和測試DLL)
  • 部署程序的DLL GAC
  • 添加新的方法
  • 創建測試來測試新方法
  • 構建解決方案
  • 運行測試(在調試模式)

現在,您將獲得方法缺少例外。原因是它使用的是GAC中舊版本的dll,並且沒有該方法。

有時候它使用舊的dll的緩存版本,IISreset可以提供幫助。

在你的情況下,檢查任何舊版本的DLL。

+0

當開發環境持有對dll的引用時,我也偶爾會得到這個。關閉開發環境然後重新打開它將解決該問題。 – Jay 2013-03-14 20:43:37

1

這發生在我身上時,當我使用IIS從dev文件夾託管站點時,我進入並調整了構建設置以輸出到/ bin/Debug,而不是隻是/ bin。

您需要將二進制文件放在與服務相同的文件夾中,在我的情況下,以及在bin文件夾中對舊版本進行調整並將後續版本放入/ bin/Debug文件夾(和/ bin/Release) 。

既可以保持設置原樣並具有構建操作以將位複製到一個級別,具有用於調試/發佈的不同IIS應用程序,也可以完全部署到另一個文件夾。後者可能是最「正確的」,但對於我的目的,我剛剛意識到經過多輪轉動,我在服務的文件夾中有不同的版本。 HTH。

0

在我的情況下,我剛剛部署在.NET 3.0(Windows XP)的機器上,而編譯目標已經.NET 3.5。

此錯誤消息確實沒有幫助。

問題來自System.Runtime.Serialisation的DataContract的使用。