gpt4 book ai didi

.net - 诊断 MissingMethodException

转载 作者:行者123 更新时间:2023-12-05 08:44:06 30 4
gpt4 key购买 nike

当我在一台机器上启动我的应用程序时,它立即退出说它已经“停止工作”。在事件日志中,我看到 MissingMethodException 是原因。没有显示异常对话框,并且在事件日志详细信息中我看不到任何详细的错误消息(包含例如“找不到方法:xyz”)。

事件处理程序信息说(试图在这里将其翻译回英文,可能不是逐字的)

Application: Myapp.exe Framework-version v4.0.30319

Description: The process was terminated due to an unhandled exception

Exception information: System.MissingMethodException

Stack: at MyApp.MainClass.Main(System.String[])

当引发此异常时,我如何才能找到哪个方法丢失了?它是一个托管应用程序,但它具有许多 native 依赖项。

编辑:编译后的程序集全部在同一个构建中编译,即应用程序的托管代码中没有版本不匹配。二进制依赖项中可能存在不匹配,但如果是这样,我如何找出是哪一个?

它是一个在 VS 2012 中构建的 Windows 窗体应用程序,但目标是 4.0。该错误不会在所有只有框架 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));
}

您很可能会取回您自己的方法之一的名称。但是,请不要低估您会看到框架方法的可能性。 .NET 4 有四个不同的版本,您无法猜测用户机器上安装的是哪一个。如果是这种情况,那么您在创建项目时犯了一个错误,您从 c:\windows\microsoft.net 子目录而不是 c:\program files\reference assemblies 添加了程序集引用。这将使您可以使用早期版本的 .NET 4 中不可用的方法。

关于.net - 诊断 MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163888/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com