Tuesday, January 11, 2011

Creating a SharePoint WSP package through Visual Studio 2010 Build

To be part of our automated build process (NAnt) here I was wanting to create the WSP on invoking devenv.exe from the command line. From the VS2010 IDE it would be straightforward to select Package from the Project context menu.

But what would be the alternative if I were to build the project and create the WSP from the command line? There is no command line argument which you can provide to devenv.exe. The articles I came across mention that MSBuild does have a way to achieve this (/p:IsPackaging=True).

If you integrate with TFS it might be worth reading this MSDN technical article. I had no intention to include MSBuild in the build, therefore needed a way to create the WSP just using Visual Studio. As I was searching around I came across this blog post by Yaroslav Pentsarskyy.

Essentially, with this approach the WSP will be created whenever you build your solution.

In a SharePoint projects project definition file or simply the project file (.csproj) couple of parameters are defined such as the build platform, build configuration etc. Apart from these variables the project file can be manually edited to add your own build tasks.

Build tasks are somewhat similar to targets in NAnt. They define a set of operations to execute during build. Visual Studio 2010 defines a set of standard SharePoint tasks that are defined in C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets. In this case I will be using the CreatePackage task.

First unload the SharePoint Project from Visual Studio to enable manual editing of the project file. Then select to edit the project file.

Add the Create Package command.
Scroll down right to the bottom and you will see the import of the SharePoint targets:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" />


This imports the Microsoft.VisualStudio.SharePoint.targets MSBuild taget file to the project. We can override specific predefined targets defined in Microsoft.VisualStudio.SharePoint.targets

Right below add the following:
<propertygroup>
<builddependson>$(BuildDependsOn);CreatePackage</builddependson>
</propertygroup>

This appends the CreatePackage task to the existing tasks defined for BuildDependsOn. Now when you build the project the WSP will be created as well.

Here are some How To articles relevant to this:

No comments: