在Compact Framework中调用新表单时抛出MissingMethodException

时间:2010-02-10 15:36:45

标签: c# .net windows-mobile compact-framework

我正在更新旧的移动设备应用程序以获得更好的灵活性。在我们想要使用测试服务器而不是生产服务器的情况下,我基本上添加了配置SQL服务器地址的功能。我不认为这会导致问题,但我想说明一下。我还将项目从VS 2003项目升级到VS 2005项目。

我遇到的问题是,当我尝试在Pocket PC的VS模拟器中运行程序时,出现错误。它出现在我们的“主菜单”表单加载并且用户选择要加载的下一个表单之后。表单初始化没有问题,但是当我们尝试运行.ShowDialog()方法时,它会抛出System.MissingMethodException。

我没有很多使用Compact Framework的经验,也不知道从哪里开始寻找问题。我将调试器逐步完成了新表单的整个初始化过程,并且运行时没有问题。但是,再次,当我们来到ShowDialog调用时,它会抛出错误。

非常感谢任何关于从哪里开始寻找或已知问题的想法。

5 个答案:

答案 0 :(得分:1)

我出于这个原因通常会收到MissingMethodException:

  • 我的项目中至少有两个文件,例如.exe文件和.dll文件
  • 我对.dll文件的源代码进行了更改,并重新编译
  • VS说它将新的.dll文件部署到设备上,但实际上并没有(保留旧文件)
  • .exe启动正常,但是当它开始访问.dll文件时,应用程序抛出一个MissingMethodException,因为它找不到旧dll文件中的方法。

修复:从设备中删除整个应用程序目录并重新部署。

答案 1 :(得分:1)

我应该在很久以前添加这个。答案最终是在移动设备上安装了不正确的.NET版本。

答案 2 :(得分:1)

可能导致此情况的问题是DLL在部署时未更新。它可能是因为有问题的DLL是多个可执行文件的依赖项。

例如,假设可执行文件A正在设备上运行,它依赖于DLL的方法callA。您正在尝试调试可执行文件B,它也依赖于DLL,但是您刚刚添加的方法callB。当Visual Studio在其中部署带有callB的DLL时,它无法执行此操作,因为可执行文件A仍在使用它。 Visual Studio不会告诉您它在部署D​​LL时没有成功。 (骗子VS !;)

要修复它,请终止所有依赖于DLL的可执行文件,然后部署它。

@Felix Alcala - 你得到了我的投票。我会将此作为注释添加到您的修复程序中,因为它直接相关。唉,我没有代表那样做。但是,我希望这个答案是公开的,因为我发现它很有用

答案 3 :(得分:0)

开始查看ShowDialog方法本身。这个错误有点误导 - 它不是ShowDialog它找不到,但是JIT编译器可能正在尝试编译ShowDialog并抛出该异常(因为ShowDialog试图调用它找不到的东西)。如果ShowDialog在不同的程序集中,那么可能存在一些无法初始化的静态,这可能同样会导致这种情况 - 但是开始查看ShowDialog本身。

因此,找到问题的一个技巧(如果不是obvisou)是减少ShowDialog中的代码,直到找到导致问题的行。我开始评论所有代码,以确认我的假设。如果您不再获得异常,请尝试一次取消注释剩余代码的一半,等等。

答案 4 :(得分:0)

当您尝试使用紧凑项目中的常规WinForm类时,可以获得此异常。

相关问题