MissingMethodException通过其 Message 属性告诉您缺少什么方法。然而,给它一个机会告诉你却经常被程序员忽略。您必须为 AppDomain.UnhandledException 事件编写事件处理程序并显示或记录 e.UnhandledException 对象。
请注意,您的程序在抖动崩溃时很早就崩溃了。抖动在代码执行之前运行。这使得您很可能正在查看问题的错误代码。导致崩溃的不是 Main() 方法,很可能是您在 Main 方法中创建的表单。尽管这是一个猜测,但您忘记在 Main() 方法中发布代码。为了安全起见,一个好的做法是将事件注册与带有 cooties 的代码分开,最好通过抑制内联来完成。修改 Program.cs 源代码,使其看起来与此类似:
using System.Runtime.CompilerServices;
...
[STAThread]
static void Main() {
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
RealMain();
}
[MethodImpl(MethodImplOptions.NoInlining)]
static void RealMain() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Your code here
//...
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
var ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), "Unexpected error");
Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(ex));
}
您很可能会得到您自己方法之一的名称。但是,不要忽视您会看到框架方法的可能性。.NET 4 有四个不同的版本,您无法猜测用户计算机上的版本。如果是这种情况,那么您在创建项目时犯了一个错误,您从 c:\windows\microsoft.net 子目录而不是 c:\program files\reference 程序集添加了程序集引用。这将允许您使用早期版本的 .NET 4 中不可用的方法。