簡體   English   中英

在Compact Framework中調用新表單時拋出MissingMethodException

[英]MissingMethodException thrown when calling new form in Compact Framework

我正在更新舊的移動設備應用程序,以提高靈活性。 在我們要使用測試服務器而不是生產服務器的情況下,我基本上增加了配置SQL服務器地址的功能。 我不認為這是造成問題的原因,但我想說明一下。 我還將該項目從VS 2003項目升級到了VS 2005項目。

我遇到的問題是,當我嘗試在用於Pocket PC的VS仿真器中運行程序時,出現錯誤。 它在加載我們的“主菜單”表單並且用戶選擇下一個表單后發生。 窗體初始化沒有問題,但是當我們嘗試運行.ShowDialog()方法時,它將引發System.MissingMethodException。

我沒有使用Compact Framework的豐富經驗,並且真的不知道從哪里開始尋找問題。 我逐步調試程序完成了新表單的整個初始化過程,並且沒有問題。 但是,再次,當我們進入ShowDialog調用時,它將引發錯誤。

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

由於這個原因,我通常會得到MissingMethodException:

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

修復:從設備上刪除整個應用程序目錄,然后重新部署。

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

可能導致這種情況的問題是,部署DLL時未對其進行更新。 這可能是由於所討論的DLL是多個可執行文件的依賴項所致。

例如,假設可執行文件A在設備上運行,並且依賴於DLL的方法callA。 您正在嘗試調試可執行文件B,該文件也依賴於DLL,但依賴於剛添加的方法callB。 當Visual Studio部署其中帶有callB的DLL時,它無法這樣做,因為可執行文件A仍在使用它。 Visual Studio不會告訴您部署DLL失敗。 (說謊者VS !;)

要修復此問題,請殺死所有依賴該DLL的可執行文件,然后進行部署。

@Felix Alcala-你得到了我的投票。 我會將其作為注釋添加到您的修復程序中,因為它是直接相關的。 las,我沒有代表這樣做。 但是,我希望此答案公開,因為我發現它很有幫助

開始查看ShowDialog方法本身。 該錯誤略有誤導性-它不是無法找到的ShowDialog,但是JIT編譯器可能正在嘗試編譯ShowDialog並拋出該異常(因為ShowDialog試圖調用它找不到的東西)。 如果ShowDialog在不同的程序集中,則可能存在無法初始化的靜態內容,這可能會類似地導致這種情況-但首先要查看ShowDialog本身。

因此,發現問題的一種技巧(如果沒有發現)是減少ShowDialog中的代碼,直到找到導致問題的行。 我將開始注釋所有代碼,以確認我的假設。 如果您再也沒有收到異常,請嘗試一次取消注釋剩余代碼的一半,等等。

當您嘗試從緊湊型項目中使用常規WinForm類時,可以得到此異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM