2010-02-10 53 views
1

我正在更新舊的移動設備應用程序以獲得更好的靈活性。我基本上增加了配置我們的SQL服務器地址的能力,以防我們想使用我們的測試服務器而不是我們的生產服務器。我不認爲這是造成問題的原因,但我想說明。我還將項目從VS 2003項目升級到VS 2005項目。在Compact Framework中調用新窗體時拋出MissingMethodException

我遇到的問題是,當我嘗試在Pocket PC的VS模擬器中運行程序時,出現錯誤。它發生在我們的「主菜單」表單加載後,用戶選擇下一個表單加載。表單初始化沒有問題,但是當我們嘗試運行.ShowDialog()方法時,它會引發System.MissingMethodException。

我沒有很多Compact Framework的經驗,真的不知道從哪裏開始尋找問題。我在新窗體的整個初始化過程中加入了調試器,並且沒有問題。但是,當我們來到ShowDialog調用時,它會拋出錯誤。

任何想法在哪裏開始尋找或已知的問題將不勝感激。

+0

VS2000?你確定?....從來沒有聽說過,也沒有見過一個VS2000,如果我的記憶爲我服務正確...... – t0mm13b 2010-02-10 15:48:03

+0

道歉,這是VS 2003.請原諒我的錯字。 – Boerema 2010-02-10 15:57:19

+0

@Boerama:好的。對於初學者,你有.NET CF v2 SP1? – t0mm13b 2010-02-10 16:01:31

回答

1

我應該在很久以前添加這個。答案最終是移動設備上安裝了錯誤的.NET版本。

0

開始查看ShowDialog方法本身。這個錯誤有點誤導 - 它不是ShowDialog,它不能找到,但JIT編譯器可能試圖編譯ShowDialog,並拋出該異常(因爲ShowDialog試圖調用它找不到的東西)。如果ShowDialog在不同的程序集中,那麼可能會有一些靜態的,無法初始化,這可能會導致這種情況 - 但是開始尋找ShowDialog本身。因此,找到問題(如果不是obvisou)的一個竅門是減少ShowDialog中的代碼,直到找到引起問題的行爲止。我會開始評論所有的代碼,以確認我的假設。如果你不再得到的異常,嘗試在取消大約在同一時間,其餘一半代碼等

1

我通常得到MissingMethodException這個原因:

  • 我有至少兩個文件在我的項目中,例如一個.exe文件和一個.dll文件
  • 我對.dll文件的源代碼進行了更改,並重新編譯了VS說它將新的.dll文件部署到設備,但實際上它不(它保留舊文件)
  • .exe啓動正常,但是當它開始訪問.dll文件時,應用程序拋出一個MissingMethodException,因爲它無法在舊的dll文件中找到這些方法。

修復:從設備中刪除整個應用程序目錄並重新部署。

+0

請參閱@ Hawkez的解決方案以獲取更多的深入見解 – 2016-01-27 09:41:19

0

當您嘗試使用緊湊項目中的常規WinForm類時,可能會得到此異常。

1

可能導致這種情況的一個可能的問題是DLL部署時未更新。它可能是由於所涉及的DLL是多個可執行文件的依賴關係造成的。

例如,假設可執行文件A正在設備上運行,並且它依賴於DLL的方法callA。您正試圖調試可執行文件B,該文件也依賴於DLL,但是您只是添加了方法callB。當Visual Studio去部署帶有callB的DLL時,它不能這樣做,因爲可執行文件A仍在使用它。 Visual Studio不會告訴你它在部署D​​LL時不成功。 (Liar VS!)

要修復它,殺死所有依賴於DLL的可執行文件,然後部署它。

@Felix Alcala - 你得到了我的投票。我會將此添加爲您的修補程序的註釋,因爲它與直接相關。唉,我沒有代表這樣做。但是,我想這個答案是公開的,因爲我發現它有幫助

相關問題