Developing add-ins can be a bit of a hassle, especially if the add-in is currently used by Visual Studio. How do you test/debug it? Well, after you compile it you have to...

  1. Close Visual Studio.
  2. Copy the add-in to the AddIns folder.
  3. Start Visual Studio and load the add-in project.
  4. Realize it has some bug.
  5. Modify and compile it.
  6. Go back to Step 1....

Not only is it cumbersome, if it breaks (as things may do in their development phase) during this process so that Visual Studio can't load it, you obviously can't debug it.

What Does VSStub Do?

VSStub loads an add-in (path to it shall be given as a command-line parameter) and, from the add-in's point of view, behaves pretty much like Visual Studio.

It implements the basic interfaces of the Developer Studio Object model: IApplication, IDebugger, ITextDocument, and so forth.

It is naturally not as sophisticated as Visual Studio itself (for example, it re-uses the same IDocument instance over and over even if the add-in tells it to create a new one), but it gives something for the add-in to interact with. Most of the attributes can be modified through the GUI and you can, of course, tweak it to better suit your needs.

You can call the add-in's commands and fire various events to see how the add-in behaves; for instance, by setting a breakpoint at the add-in's command/event implementation. If you find some bug in the add-in, just fix it, compile, and run...

Typical Usage

In the add-in's project settings:

  1. Set VSStub to be the add-in's executable.
  2. Set the path to the add-in as program arguments.

Set breakpoints or whatever and run it...

About the Source Code

VSStub is an ordinary (if there is such a thing) MFC Dialog application.

Getting the add-in's CLSID is somewhat difficult because there is no way to just ask for it. The CLSID is required as input when calling DllGetClassObject to get the IClassFactory.

VSStub solves this by:

  1. Unregistering the add-in (DllUnregisterServer). This ensures the add-in's CLSID is not in HKEY_CLASSES_ROOT/CLSID.
  2. Checking the time stamp.
  3. Registering the add-in (DllRegisterServer). This should put the CLSID in HKEY_CLASSES_ROOT/CLSID.
  4. Enumerating sub keys in HKEY_CLASSES_ROOT/CLSID, looking for keys where LastWriteTime>=time stamp.
Note: If Visual Studio uses the add-in, the next time Visual Studio starts it will use the add-in that was last registered.

(If anyone knows of a better way to get the CLSID, I'd be glad to hear about it.)



  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: September 23, 2015 The cloud is not just about a runtime platform for your projects – now, you can do your development in the cloud, too. Check out this webcast to learn how the cloud improves your development experience and team collaboration. Join Dana Singleterry, Principal Product Manager for Oracle Dev Tools, as he discusses how to simplify every aspect of the development lifecycle, including requirements gathering, version management, code reviews, build automation, and …

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date