Creating and Publishing NuGet Packages to reUrgency NuGet repository
reUrgency hosts a private NuGet repository that we can use to publish and consume NuGet packages that we create. NuGet packages are a great way to share components across projects.
Advantages of NuGet over other ways of sharing
- Easy to install using the NuGet Package Manager
- Versioned – each NuGet package has a version associated with it and therefore it’s easy to see which version of a package you are using.
- Upgrade when you want – unlike sharing via SVN Externals, each project gets to decide when/if that project upgrades to a version of a package.
- Install and configure all kinds of things – when a NuGet package is installed a powershell script runs that can perform any setup action necessary. This provides a lot of power and automation.
- Enforces decoupling – because NuGet packages are completely separate projects it is very difficult to accidentally introduce tight coupling. Therefore it is more reusable
- Includes dependencies – NuGet packages include a set of dependent DLLs with associated versions. This ensures that all dependent NuGet packages are installed first and that they are the proper version. You can also use this feature to install lots of NuGet packages all at once. i.e. you could create a package that simply has dependencies in a bundle for easily setting up projects.
reUrgency Repository
We have created our own private repo. You must be on the reUrgency VPN to access it.
NOTE: ignore the instructions on that page on how to publish. We have a much simpler method documented below.
In VS2012, in the package manager settings, add the following URL to the list of Package Sources:
http://nuget.reurgency.net/nuget
Our repo is already setup, but in case we ever need to setup another one in the future, here is documentation on how to setup a private repo.
http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds
Anatomy of a NuGet Package
The most useful reading you can do is to read about the anatomy of a NuGet package. Once you understand that, you can pretty easily extrapolate what you need to put where and how to diagnose problems.
http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package
There’s a lot of information in that document. Make sure you read it and understand it, but see below for simple steps.
Setup a NuGet Package
Step 1
Install Visual Studio Template for NuGet projects
http://visualstudiogallery.msdn.microsoft.com/daf5c6db-386b-4994-bdd7-b6cd52f11b72
Step 2
Follow instructions here for creating a new package
http://www.eyecatch.no/projects/nuget-package-template/
Step 3
Create a deploy.ps1 file in the root and write the xcopy deployment code. Example:
xcopy /y C:devREsrcReurgency2trunkReurgency.Common.Packager*.nupkg \re-source-1.reurgency.netpackages
See next section for explanation of this non-standard (but much simpler) publishing process.
Simplified Publishing Process
Normally NuGet packages are published via an HTTP File post. This was a little tricky to configure and I just decided to use a simpler method that is less fragile and allows anybody to manually upload new NuGet Package versions.
NuGet Packages are just files in a special folder that is hosted on a website. There is no database or registry settings. As soon as the .nupkg file is dropped in the proper folder on the web server it shows up in the NuGet repo.
So taking advantage of this simple model, I opted for a super simple xcopy deployment script.
xcopy /y C:devREsrcReurgency2trunkReurgency.Common.Packager*.nupkg \re-source-1.reurgency.netpackages
As you can see from that example the UNC path to the repo folder is
\re-source-1.reurgency.netpackages
NOTE: you may have to change your VPN setting to allow file share access.
Publish a new version of a NuGet Package
As you make changes to your package and it’s dependencies, you will want to periodically publish a new version to the reUrgency repo so others can use it.
Step 1
Increment the version number in Package.nuspec
Step 2
Compile your package
Step 3
Run deploy.ps1
NOTE: By default Visual Studio will open a PowerShell script for editing (not run it). To run it, right click on the file and choose “Open With…”. Click “Add…” to add a new action. PowerShell.exe is located at “C:WindowsSystem32WindowsPowerShellv1.0powershell.exe”
Example Packages
If you would like to see an example of working NuGet package, look here in SVN:
https://source.reurgency.net/svn/Reurgency2/trunk/Reurgency.Common.Packager
or
here on disk
C:devREsrcReurgency2trunkReurgency.Common.Packager