14

在 Visual Studio 的早期版本中,扩展(更具体地说,是插件)只有一个入口点,即OnConnect方法。从那里可以执行所有 Visual Studio 操作,例如添加菜单项和设置全局异常处理程序,以优雅地处理未处理的异常。

在 Visual Studio 2010 的 VsPackage 中,事情的工作方式有所不同 - 应用程序的许多部分(例如IWpfTextView)由 MEF 组成并在没有显式控制包的情况下加载,这使得处理来自那些异常的任何异常都非常困难。

如果不将所有此类组件显式包装在try..catch它们自己的组件中,我如何才能有效地为我的 VsPackage 中的(非关键)异常实现全局处理程序?同样,目标是拥有类似 ReSharper 的异常对话框,它可以在其中处理全局异常而不会导致 Visual Studio 崩溃。

4

1 回答 1

4

我通过阅读官方 VsExtensibility 论坛调查了这个主题,根据这个这个线程,没有这样一个地方可以捕获所有异常。所以典型的解决方案是在任何地方使用try... catchs

我建议使用PostSharp之类的 AOP 框架之一来通过属性来完成此任务,以消除大量的重复代码,其唯一目的是处理未处理的异常。

于 2011-06-16T12:04:40.043 回答