The Tool
With AddIn Manager, you can enable/disable addins, set load options, and do the dreaded ResetAddin that, sometimes, is just necessary. Additionally, it enables you to explore all the locations where Visual Studio searches for addins.
For me, the AddIn Management in Visual Studio 2005 is broken; the Search and Load mechanism is more complex and less transparent than ever, and the advertised functionality like enabling addins, and controlling their load time often doesn't work. As SP1 doesn't seem to change that, I decided to publish this article.
This tool certainly isn't perfect (the UI is particularly horrible) but it gives back full control over your addins - whether you create them or "just" use them.
It was developed with and tested for VS 2005. It should work for VS 2002 and VS 2003 too - I played around with some stale VS2003 registry entries, too, but that doesn't count as testing, does it?
Caution: This is the result of a long night's hack and aimed at power users. While I never had any problems with it, there is certainly potential for screwing up things. You need to restart Visual Studio after making changes. Also, when Updating or uninstalling an Addin, make sure you haven't disabled it, as this would leave some stale files, and may confuse this poor little tool.
Using Addin Manager
The Dialog gives you a tree of addin search locations, each available for Current User and for Local Machine. Under each location, the actual addins are listed.
"Registry Free Search paths" are the folders you search where Visual Studio 205 looks for .vsaddin files and loads the addins automatically.
Theoretically, the Setup for an Addin just needs to copy some files there - no registry modification needed. However, since these locations are badly documented, and can be freely configured, but their current settings cannot be (legally) discovered by the setup, this doesn't work out as intended, so most addin developers still use the registry method.
Of course, the registry keys for VS 2005, 2003 and 2002 are also accessible.
Enable / Disable Addins
You can enable/disable individual addins using the checkboxes, and also some - not all - of the search paths and registry hives.
When you enable/disable an addin or a folder, it gets renamed in a way that Visual Studio will no longer recognize (but will still be there).
Note that not all checkboxes work, as I couldn't find a way to show them - only at selected items. (I guess they could be hidden by fiddling with the state image list, but that's a job for another day).
Where Is It?
You can click the "Explore" link to find the location of the selected item (addin, search path, registry key). For Registry-Free paths and addins, this will launch explorer with the given item selected.
For registry keys, this will launch regedit
, and you have to select Favorites/AddIn Manager - last Explore from the regedit menu.
ResetAddIn
I don't know how to say this nicely, so I'll be blunt: sometimes, Visual Studio will forget about your addins. They are there, but they don't show up. Visual Studio has a /ResetAddin
option to reset an addin specified by name - you can now do this through AddinManager
.
If you have selected an Addin, you can click on one of the VS2005 / VS2003 / VS2002 links after ResetAddins
. This attempts to start the respective Visual Studio version with...
/ResetAddin <your currently selected addin>
...on the command line.
Set Load Options
This is probably most useful for developers. Refer to the Visual Studio documentation for more information. I never figured out the true purpose of Set Load Options, but they seem to be important.
The Sources
This article is published under "Free tools" for a reason: the AddInManager
sources aren't a shining example of good practices. So use them if you wish, but don't expect them to be of particular quality.
The tree nodes are made up by different classes implementing IAddinInfo
with AddinInfoImpl
as default implementation. Each node knows to enumerate its childs, and provides the enable/disable, explore, etc. operations. The implementation classes are all called AII
something.
The following classes are in the phlib
project:
The tree logic is based on my Generic Tree in C# article. An internal Model of the data contains the AIIsomething helper objects. A Controller automatically updates the tree View when the model changes. Like in the books!
TaggedString
associates a string
with an Object
. The Windows Forms wrapper classes for list and combo box controls are a bit disappointing. Instead of offering the standard
{
string Label;
object Tag
}
pattern for each item, they ask you to provide an object for each item, and use the objects ToString
for the label. TaggedString
holds a string
and an object
and overrides ToString
, essentially providing the { Label, Tag }
mechanism.
AIIRegistryFreeAddIn::GetAddinOptions
and ::SetAddinOptions
display the basic chores of modifying XML files. Either simple tasks are still painful, or XML is just not my thing.
There are also some string
helper routines, which I think aren't used in the project.
Licence
The Tool in binary form is free for any use and may be redistributed without charge, as long as it remains unmodified and is attributed to the original author (e.g. by linking to this article).
Source code of the add-in itself is free for non-commercial use, please share bug fixes and improvements here.
If you find this useful, please leave a message!
To comply with Shog9s visual pleasure requirements, no ordered or unordered lists were created in writing this article.