繁体   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