||Carlos J. Quintero (Microsoft MVP)
||Microsoft Visual Studio .NET 2002
||Microsoft Visual Studio .NET 2003
||Microsoft Visual Studio 2005
||Microsoft Visual Studio 2008
||Microsoft Visual Studio 2010
||Microsoft Visual Studio 2012
This article discusses some considerations when handling exceptions in a Visual
When designing the exception handling mechanism of an add-in, the following
important principles should be followed:
- Since Visual Studio doesn't allow to use a global exception handler in an
add-in (using the AppDomain.UnhandledException event), the following entry
points of the add-in should include individual exception handlers (try/catch
- Methods of the IDTExtensibility2 interface (OnConnection, OnStartupComplete,
- Methods of the IDTCommandTarget interface (QueryStatus, Exec)
- Event handlers of the EnvDTE automation interface (CommandEvents, WindowEvents,
- Event handlers of controls in forms and usercontrols of the add-in
- All the exception handlers must call to a single global method that treats the
exception (showing a message to the user, sending it back to the developer,
- That single global method must receive the EnvDTE.DTE object. With that object,
important information can be added to the bug report such as:
- The IDE full name (DTE.FullName property).
- The IDE version (DTE.Version property).
- The IDE Edition (DTE.Edition property).
- The IDE Locale ID (DTE.LocaleID property). This is important to troubleshoot
problems that don't happen on the English Visual Studio of the developer of the
add-in but can happen on the localized Visual Studio of other developers around
the world using the add-in.
- The IDE Registry Root (DTE.RegistryRoot property).
- The IDE Display Mode (DTE.DisplayMode property).
- The IDE Command Line Arguments (DTE.CommandLineArguments property).
- Other important information (that doesn't require the DTE object) can be added
to the bug report such as:
- The .NET Framework version (System.Environment.Version property).
- The add-in assembly file version (getting the AssemblyFileVersionAttribute of
the assembly returned by System.Reflection.Assembly.GetExecutingAssembly()).
- The add-in assembly location
- You can add even more information about packages and service packs as described
in the article HOWTO: Detect installed Visual Studio editions, packages or service packs.
Go to the 'Visual Studio Extensibility (VSX)' web site for more articles like this (Articles section)