And*_*ren 1 .net .net-4.0 missingmethodexception winforms
当在一台机器上启动我的应用程序时,它立即退出并说它“已停止工作”。在事件日志中,我看到MissingMethodException是原因。没有显示异常对话框,并且在事件日志详细信息中,我看不到任何详细的错误消息(例如,包含“找不到方法:xyz”)。
事件处理程序信息说(试图将其翻译回英语,可能不是逐字记录)
应用程序:Myapp.exe Framework版本v4.0.30319
说明:由于未处理的异常,进程已终止
异常信息:System.MissingMethodException
堆栈:位于MyApp.MainClass.Main(System.String [])
引发此异常时,如何找到缺少的方法?它是一个托管应用程序,但具有许多本机依赖性。
编辑:编译的程序集都在同一版本中编译,即在应用程序的托管代码内没有版本不匹配。二进制依赖项中可能存在不匹配,但是如果这样,我如何找出哪一个呢?
它是VS 2012中内置但针对4.0的Windows Forms应用程序。在只有Framework 4.0的所有计算机上都不会引发该错误,因此这似乎不是问题。
MissingMethodException 通过其Message属性告诉您缺少什么方法。但是,让程序员有机会告诉您的机会常常被忽略。您必须为AppDomain.UnhandledException事件编写事件处理程序,并显示或记录e.UnhandledException对象。
请注意,您的程序在抖动崩溃时很早就崩溃了。抖动在执行代码之前运行。这可能导致您正在寻找错误的代码来解决该问题。并不是导致崩溃的Main()方法,最有可能是您在Main方法中创建的表单。尽管这只是一个猜测,但您忘记将代码发布到Main()方法中。为了安全起见,一个好的实践是将事件注册与带有代码的代码分开,最好通过抑制内联来实现。修改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));
}
Run Code Online (Sandbox Code Playgroud)
您很可能会用自己的方法之一取回名称。但是,请勿低估看到框架方法的可能性。.NET 4有四个不同的版本,您无法猜测用户计算机上的哪个版本。如果是这种情况,那么在创建项目时就犯了一个错误,您是从c:\ windows \ microsoft.net子目录中添加了程序集引用,而不是c:\ program files \ reference程序集。这样您就可以使用.NET 4早期版本中没有的方法。
| 归档时间: |
|
| 查看次数: |
5417 次 |
| 最近记录: |