c# – 为什么不能捕获MissingMethodException?
发布时间:2020-12-15 03:56:53 所属栏目:百科 来源:网络整理
导读:我在ClickOnce部署的应用程序中依赖于.NET 2.0 SP2 (ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate(false)方法仅为SP2). 我想在应用程序启动期间检查SP2是否存在.我尝试通过捕获MissingMethodException在调用一个仅SP2方法后检测到这一点
我在ClickOnce部署的应用程序中依赖于.NET 2.0 SP2
(ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate(false)方法仅为SP2). 我想在应用程序启动期间检查SP2是否存在.我尝试通过捕获MissingMethodException在调用一个仅SP2方法后检测到这一点. /// <summary> /// The SP2 bootstrapper does not allow HomeSite installation /// http://msdn.microsoft.com/en-us/vstudio/bb898654.aspx /// So we only advice the user to download .NET 2.0 SP2 manually. /// </summary> private void CheckDotNet2SP() { WaitHandle wh = new AutoResetEvent(true); try { wh.WaitOne(1); //this method is .NET 2.0 SP2 only } //NOTE: this catch does not catch the MissingMethodException catch (Exception) //change to catch(MissingMethodException) does not help { //report that .NET 2.0 SP2 is missing } finally { wh.Close(); } } 当在没有SP2的.NET 2.0上运行时,catch中的代码不会执行.该异常仅由AppDomain.CurrentDomain.UnhandledException事件处理程序捕获. MissingMethodException如何被捕获?我可以想象这是一个特殊情况 – CLR命中一个不存在的方法,不知何故不能将它传递给catch块.我想了解这个背后的原则. 任何人都有这方面的资源吗?有没有其他例外,不能被抓住catch块? 解决方法
我怀疑这是在JIT时间发生的,甚至在方法正确输入之前 – 即在你的catch块被击中之前.有可能如果在调用方法中捕获MissingMethodException,那么将排序…特别是如果使用MethodImpl [MethodImplOptions.NoInlining]装饰CheckDotNet2SP.它仍然听起来像是很漂亮的骰子.
您可以随时检查方法的存在,而不是尝试调用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |