Creating Packages with VSIP Extras

If you're a VSIP developer, you're probably anticipating the final release of VSIP Extras (currently in beta). Not only can you write packages in C# (or any other .NET language for that matter), but we've even given you a wizard to get all the messy code done for you so you can focus on your package's functionality.

To start the wizard (from within VS .NET 2003 with VSIP and VSIP Extras [Beta] installed), go to File->New Project. Then select Other Projects->Extensibility Projects->Visual Studio Integration Package. The wizard allows you to generate a basic project in either C# or C++. Since it uses the new VSIP helper classes, let's stick with C# for now. The following pages allow you to set basic information about your package and allow you to add a menu command, tool window, and/or a custom editor to your package.

Upon completing the wizard, you should have a functioning VSIP package written in C#....and you didn't have to write a line of code yet!!! You may notice that there are actually 2 projects in the generated solution (one in C# and one in C++). The C++ project is the project that builds what's known as your satellite DLL. You may see this term in other areas of the VSIP documentation. This is the DLL that contains the localized user interface (UI) elements for your package (hence the “UI” at the end of the project name). This way, you can keep all your functionality in one DLL, but move the language-specific UI elements into separate projects, making it easier to distribute your package in multiple languages.

Now let's take a look at the C# project that was generated. You should have several files there, but the most interesting one will probably be VsPkg.cs. This is where your base package code resides. One of the other cool new features of VSIP Extras is what we call the “helper” classes. You will find these in the Microsoft.VisualStudio.VSIP.Helper.dll library. There should be a reference to the helper DLL in your C# project. These are a set of classes and attributes which you can inherit from and override to implement your package. Next time, I'll explain some more about what else is in the generated project. Stay tuned!