IntroductionHalf a year ago, I announced – in this post – the forthcoming release of a new secret weapon. I apologize for the delay, but I entertained myself doing other things and I couldn't find a way to spend a couple of days on formulating it.
I could even tell you: ‘I had no time to do it’, but I learned the lesson – maybe I'm still learning – from my father. He always insisted me: ‘Alex, the time is the same’. So, what actually happened was a matter of time management and prioritization.
The true is, I also expected that something like this already exists at this time, but it doesn’t. So, I recalled this, wrote the minimal working code, push the sources and here it is.
What is SharePoint Package Manager?
|SharePoint Package Manager|
Basically, it's an extension of the SharePoint Central Administration site that automates the process for install or update solution packages from package sources (regular NuGet repositories).
Why NuGet?Why not? NuGet is the widely accepted and popular package manager among .net developers.
There are also a lot of custom solutions and initiatives that use NuGet as the backend, for instance, ReSharper extension manager, OctopusDeploy, Chocolatey, Squirrel, you know, even Catel extending the modularity options of Prism.
There are only a few rules in order to use this package manager, starting with this 'new' concept: solution package.
What is a solution package?
A solution package is a regular NuGet package with its name ending in '.wsp' and with following structure:
Notice how the folder 'content' contains a wsp file with the same name of the solution package and that’s it.
|A sample of solution package for SignalR.|
A solution package can also have declared dependencies, but only between solution packages.
Maybe the naming convention looks weak, but there is only one package in the gallery with name Digst.OioIdws.Wsp, so, for me, is enough. Eventually, the package manager could also track non-solution packages through an ignore list.
|Solution packages from NuGet Gallery. The Digst.OioIdws.Wsp isn't a solution package.|
Managing package sources
The SharePoint Package Manager includes a page to manage the package source. You are able to add, remove, edit, enable or disable a package source.The default package source is the NuGet Gallery.
|Creating a new package source|
Installing or updating solution packages
The SharePoint Package Manager also includes a page to manage the farm packages. Looking for the installed solutions in the SharePoint solution storage and making a join with available solution packages from the package sources, the page shows the available solution packages to install or update.
|Managing the farm packages|
Sorry about the name of the solution package in Spanish on the image above but was client choice and the picture was taken from real life scenario.
The SharePoint Package Manager provides an option to install or update solution packages. After clicking the button – on the right of the solution package info – the system will schedule a job to install or update the last available version of the selected solution package. If the selected package has dependencies, the package manager will also install or update all dependencies in the right order.
|Tracking the install or update process.|
What's next?This is almost a draft or a proof of concept, remember just the minimal working code. So, you can try. I also published the SignalR.SharePoint.WSP solution package at NuGet gallery, so, you should see it as an available solution package.
Enjoy it, and let me know what you think. Even better, we can do this together, just fork the source on GitHub. There are a lot of things to do, including better user interface, REST services, a better approach for settings storage, ignore list, performance issues, msbuild extension, Visual Studio extension, and so on. You tell me.
In the meantime, I’m already working to turn more Catel’s rumors in true.
Talking about rumors, if everything goes right, I might update my resume in about seven months. Yes, your assumption is correct, I'm a father candidate ;).