NuGet Package Restore and MyGet Build Services
With the release of NuGet 2.7, a new way of doing package restore came to life. Package restore allows you to keep only your source code and packages.config under source control and just download and install NuGet dependencies during build.
What does this mean for MyGet Build Services? Let’s say we’re making it easier for you! When building from a Visual Studio solution or project, there is nothing you should do: we will run package restore automatically. Let’s dive into the package restore conventions we have in place. Full details on the build process are available from our documentation.
Package Restore Conventions
MyGet Build Services runs NuGet Package Restore as part of every build of solution or project files even if it's not enabled for the solution. Note that package restore is not run for builds making use of batch or PowerShell scripts. In those cases, you are the responsible for running package restore.
In order of precedence, the following package restore commands are run. When one succeeds, package other commands will be skipped.
nuget restore MyGet.sln -NoCache -NonInteractive -ConfigFile MyGet.NuGet.config
nuget restore MyGet.sln -NoCache -NonInteractive -ConfigFile NuGet.config
nuget restore <your solution file> -NoCache -NonInteractive -ConfigFile MyGet.NuGet.config
nuget restore <your solution file> -NoCache -NonInteractive -ConfigFile NuGet.config
nuget restore packages.config -NoCache -NonInteractive -ConfigFile MyGet.NuGet.config
nuget restore packages.config -NoCache -NonInteractive -ConfigFile NuGet.config
nuget restore MyGet.sln -NoCache -NonInteractive
nuget restore <your solution file> -NoCache -NonInteractive
nuget restore packages.config -NoCache -NonInteractive
If you are working with other feeds than the default NuGet.org feed, there are some options available.
Restoring from other Package Sources
If you want MyGet Build Services to restore packages from a specific feed, there are several options available to do this. The easiest way of making a package source available to the build process is by adding it through the UI.
Using the Add package source button, you can add any feed that you want to make available during build: a Chocolatey feed, a TeamCity feed or another MyGet feed. It is even possible to store credentials so an authenticated feed can be used during build.
If you prefer to have all feed information in your source repository, that’s an option too. Adding a MyGet.NuGet.config
file to your repository is the key to success. See the NuGet docs for more information on how such file can be created. The following is a sample registering a custom NuGet feed for package restore.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="Chuck Norris feed" value="https://www.myget.org/F/chucknorris/api/v2/" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
A small remark: if you have an authenticated feed but do not wish to add credentials to source control, credentials can be added to the feed's package source. These credentials will be available during build and allow you to consume a protected feed with ease.
Summary
Using NuGet Package Restore in MyGet Build Services is a breeze. We follow standard NuGet conventions to do your builds and allow adding package sources which will be made available during build through the UI. If you do need to customize things, there are several hooks available too. Full details on the build process are available from our documentation.
Let us know what you think about this feature through the comments below or in our forums!
Happy packaging!