I'm involved in a big SharePoint implementation project, targeting a potential of 100.000 users. We made several site definitions, numerous features with feature receivers and quite a bunch of webparts. The thing is, as our farm is not hosted by the same company that will use it, we need to package our solution in such a way that it's -easy- for the company managing the environment to install and update our solutions.

Of course, this means everything packed into one WSP file.

Microsoft provides us with the SharePoint extensions for Visual Studio, but although nice, it's still a bit too limited (and not supported by Visual Studio 2008)

A fellow consultant in the project introduced me to WSPBuilder, made by Carsten Keutmann from Denmark. The idea behind his tool is simple but brilliant: create a folder structure following the 12 hive on your SharePoint server. Put your features in the 12\templates\features folder, your site definitions in 12\templates\sitetemplates, etc. etc. Just package everything as you want your files to appear on the server. Then run his tool and it will pack everything nicely into a WSP which you can easily deploy to your server.

We created a Visual Studio solution with one project consisting of the deployment package (so it contains the 12 hive folder structure). Then we added a project which compiled into an assembly that contains our webparts. In the post build event we copy the assembly into the appropriate GAC folder in our local 12 hive (every assembly in that folder will be added to the GAC by the WSPBuilder package). We created a similar project for our feature receivers and some other packages containing some code-behind classes for some aspx files we deploy to the server.

In the build events of the deployment project we run WSPBuilder and the end result is that on every build (just make sure you set up the appropriate project dependencies in the solution) we end up nicely with a WSP solution file.

It takes a bit of time setting it up but after you've done that, development and deployment is greatly faster. It's an incredible time safer and also provides you with a good structured set up to add and modify code.

Carsten recently released an update to his WSPBuilder. It is now implemented as a Visual Studio solution template. Just create a new solution, pick the appropriate template and you will end up with a local version of the 12 hive. Right click on the project, select 'add new item' and pick the item you want to add, like a webpart, or a feature with a receiver. It will add all the required boilerplate files for you, just a matter of adding your own code and you're done. Right click actions on the project even allow you to install the package, upgrade it, or for instance recycle the application pools.

All in all: a -must- have.

The other tool I also discovered on his website: Sharepoint Manager 2007. It's a browser, which you install on the server. It allows you to browse through your complete environment, see your site collections, your site features, uninstall features, see which fields a list has, etc. etc. It goes too far to describe what kind of information it provides, but it has proven very useful for me during debugging. We add among other things to the property bag using provisioning code and this browser easily allowed me to see the values of the parameters in the bag.

I can really recommend both tools. They are lifesavers for any SharePoint developer.