Friday, August 22, 2008

The history of WSPBuilder

WSPBuilder (June 2007)
In the beginning of 2007 I was tired of writing the wsp manifest.xml file and defining the DDF file by hand. I really needed a tool to auto generate this. I tried one of the first tools on the internet that someone had made (I have forgotten where),however it was written in VBscript and only implemented some very basic functionality. But it made me discover that the structure of the wsp file is simply a reflection of what goes into the 12 hive. Therefore it was clear to me that the next step was to simply make it a full blown C# project. Still I needed to be sure to cover all of the possibilities that wsp schema had to offer. Luckily Microsoft provides a xml schema definition for the manifest.xml file. This made it possible to auto generate a C# class library that would serialize into a manifest.xml file. Then the only thing that I had to do now was to fill in the code and serialize the objects. But I was not home yet, I needed something to create the CAB file (WSP). I was able to choose from the makecab.exe application provided by Microsoft or use the CabLib.dll project created by Elmue. In the spirit of GPL and for full control of the Cab file creation I went for the Elmue project.

Deployment (August 2007)
Here the power of the GPL license really comes into effect. Chris Doty created the deployment part of WSPBuilder and submitted it to me. First it was made as a independent console application WSPDeployer.exe and later on it was merged into the WSPBuilder application.

WSPBuilder Extensions (January 2008)
Tom Clarkson really did a big contribution here. He basically created the WSPBuilder Extensions project with Visual Studio project and item templates and an Visual Studio Addin with a MSI install program with it. After some minor modification the first version of WSPBuilder Extensions was born. In the following versions the Extensions has been improved and the Visual Studio Addin has been rewritten to a more professional look and the functionality extended.

Mono.Cecil (may 2008)
The WSPBuilder was having some issues with reflection on assemblies in order to be able to create the SafeControls tags in the manifest file. If an assembly was located in the Global Assembly Cache, the .NET framework would always pick up this assembly and not the newly build assembly from the project, therefore resulting in a possible incorrect manifest file. Also assembly references was a big problem for many users of WSPBuilder. This was because the users had the tendency to put reference assemblies other places on their system and because of this the .NET framework was not able to find them. With the Mono.Cecil project written by Jb Evain, WSPBuilder is now able to load the assemblies even that a copy existed in GAC and reflect on them without having to load all of the referenced assemblies.

I want to thank all the people that have helped to improve the WSPBuilder product by using, testing and reporting bugs. Microsoft for providing the site that enables you to use team foundation source control with your Visual Studio Environment and also for hosting the WSPBuilder project.

Even that WSPBuilder has not reached its full first version yet, it’s nearly completed. There are still some bugs to be fixed and documentation to be made, but overall it should implement every possible scenario that you are able to make with the Windows SharePoint Package (WSP).


Jim Black said...

I am looking for a robust replacement for MakeCAB, but not for a MOSS/SharePoint application. Instead, I want to replace MakeCAB as multi-file compression utility invoked as part of a custom action in Windows Installer. Is WSPBuilder general enough to replace MakeCAB in non-SharePoint situations?

Carsten Keutmann said...
This comment has been removed by the author.
Carsten Keutmann said...

No,.. WSPBuilder is for SharePoint Solutions Packages. However you can download use the CABLIB project (with source code) and build the needed application from this.

Jim Black said...

OK, thanks for the clarification. I like the looks of CABLIB, and its developer seems to support it ardently!