Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 诊断MissingMethodException_.net_Winforms_.net 4.0_Missingmethodexception - Fatal编程技术网

.net 诊断MissingMethodException

.net 诊断MissingMethodException,.net,winforms,.net-4.0,missingmethodexception,.net,Winforms,.net 4.0,Missingmethodexception,当在一台机器上启动我的应用程序时,它立即退出,说它已经“停止工作”。在事件日志中,我看到MissingMethodException是原因。没有显示异常对话框,在事件日志详细信息中,我看不到任何详细的错误消息(包含例如“未找到方法:xyz”) 事件处理程序信息显示(此处尝试将其翻译回英语,可能不是逐字翻译) 应用程序:Myapp.exe框架版本v4.0.30319 描述:由于未处理的异常,进程已终止 异常信息:System.MissingMethodException 堆栈:位于MyApp.Ma

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

事件处理程序信息显示(此处尝试将其翻译回英语,可能不是逐字翻译)

应用程序:Myapp.exe框架版本v4.0.30319

描述:由于未处理的异常,进程已终止

异常信息:System.MissingMethodException

堆栈:位于MyApp.MainClass.Main(System.String[])

如何查找引发此异常时缺少的方法?它是一个托管应用程序,但有许多本机依赖项

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


它是一款windows窗体应用程序,内置于VS 2012,但目标为4.0。并非所有仅使用framework 4.0的计算机都会出现此错误,因此这似乎不是问题。

MissingMethodException通常指出程序集版本不匹配

例如,您有一个使用DLL的应用程序。都是你写的。现在,向DLL中的类添加一个新方法,并在应用程序中使用该方法

现在,在部署时,您只复制新的应用程序,而忘记复制新的DLL。当应用程序尝试使用新方法时,结果将是MissingMethodException


确保所有程序集的版本正确。

MissingMethodException通常指出程序集版本不匹配

例如,您有一个使用DLL的应用程序。都是你写的。现在,向DLL中的类添加一个新方法,并在应用程序中使用该方法

现在,在部署时,您只复制新的应用程序,而忘记复制新的DLL。当应用程序尝试使用新方法时,结果将是MissingMethodException


确保所有程序集的版本都正确。

这里是一个包含调试MissingMethodException、MissingFieldException、TypeLoadException信息的程序集。

这里是一个包含调试MissingMethodException、MissingFieldException、,TypeLoadException。

MissingMethodException告诉您消息属性缺少什么方法。然而,给它一个告诉你的机会常常被程序员忽视。必须为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));
        }

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

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));
        }

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

是。我在程序集中没有不匹配的地方(它们都是相同的版本号)。我有这个问题。非常感谢。对我在程序集中没有不匹配的地方(它们都是相同的版本号)。我有这个问题。非常感谢。您使用的是什么.net运行时?是WinForms吗?WPF?一台计算机上安装了什么.net运行时?您使用的是什么.net运行时?是WinForms吗?WPF?一台机器上安装了什么.net运行时?这是个好主意。是的,我确实有一个未处理的异常处理程序,但没有像这样连接,所以它是