The NuGet Gallery
C# JavaScript CSS HTML ASP Batchfile Other
Latest commit 551fd86 Mar 24, 2017 @chenriksson chenriksson committed on GitHub UpdateIsLatest concurrent unlist fix (#3695)
Failed to load latest commit information.
.github clean up root folder Mar 31, 2016
.nuget Upgrade build script to use latest version of bin-skim utility (#3395) Dec 5, 2016
.vs/config Revert changes in applicationhost.config Oct 9, 2015
content Fix typo of "publically" (#3636) Mar 17, 2017
docs correct list formating Jun 9, 2014
src UpdateIsLatest concurrent unlist fix (#3695) Mar 24, 2017
tests UpdateIsLatest concurrent unlist fix (#3695) Mar 24, 2017
tools Added Update-Databases.ps1. Updates the databases on the configuratio… Jul 25, 2016
.gitattributes Trying out a new gitattributes... Dec 9, 2013
.gitignore Delete galops and NuGetGallery.Operations (#3602) Mar 1, 2017 Update May 21, 2014
COPYRIGHT.txt update copyright info May 27, 2015
CREDITS.txt update copyright info May 27, 2015
Deploy-StaticContent.ps1 Add Deploy-StaticContent.ps1 (#3529) Feb 11, 2017
LICENSE.txt Update LICENSE.txt Jun 4, 2015
NuGet.config Fix test failures Aug 31, 2016
NuGetGallery.sln Delete galops and NuGetGallery.Operations (#3602) Mar 1, 2017
NuGetGallery.sln.DotSettings minor formatting cleanup + ensure controllers are all partial (requir… Jun 24, 2015 readme & documentation (#3340) Nov 8, 2016
appveyor.yml Remove cloud service project from gallery (#3112) Aug 23, 2016
build.cmd Improve build script (#3477) Jan 21, 2017
build.ps1 Create symbols package for NuGetGallery.Core (#3584) Feb 22, 2017
buildandtest.ps1 Enable delay signing on NuGetGallery.Core (#3583) Feb 22, 2017
ops.cmd Restored Gallery Operations to working order Aug 6, 2013
test.ps1 Improve build script (#3477) Jan 21, 2017

NuGet Gallery — Where packages are found

Build status

This is an implementation of the NuGet Gallery and API. This serves as the back-end and community website for the NuGet client. For information about the NuGet project, visit the Home repository.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact with any additional questions or comments.

Build and Run the Gallery in (arbitrary number) easy steps

  1. Prerequisites. Install these if you don't already have them:

  2. Visual Studio 2015 - Custom install so that you may also install Microsoft SQL Server Data Tools. This will provide the LocalDB that Windows Azure SDK requires.

  3. PowerShell 2.0 (comes with Windows 7+)

  4. NuGet

  5. Windows Azure SDK

  6. Clone it!

    git clone

  7. Build it!

    cd NuGetGallery
  8. Set up the website in IIS Express!

  9. We highly recommend using IIS Express. Use the Web Platform Installer to install it if you don't have it already (it comes with recent versions of VS and WebMatrix though). Make sure to at least once run IIS Express as an administrator.

  10. In an ADMIN powershell prompt, run the .\tools\Enable-LocalTestMe.ps1 file. It allows non-admins to host websites at: http(s)://, it configures an IIS Express site at that URL and creates a self-signed SSL certificate. For more information on, check out However, because Server Name Indication is not supported in the Network Shell on versions of Windows before 8, you must have at least Windows 8 to run this script successfully.

  11. If you're having trouble, go to the Project Properties for the Website project, click on the Web tab and change the URL to localhost:port where port is some port number above 1024.

  12. Create the Database!

There are two ways you can create the databases. From Visual Studio 2015 or from the command line.

  1. From Visual Studio 2015

  2. Open Visual Studio 2015

  3. Open the Package Manager Console window

  4. Ensure that the Default Project is set to NuGetGallery

  5. Open the NuGetGallery.sln solution from the root of this repository. Important: Make sure the Package Manager Console has been opened once before you open the solution. If the solution was already open, open the package manager console and then close and re-open the solution (from the file menu)

  6. Run the following command in the Package Manager Console:

    Update-Database -StartUpProjectName NuGetGallery -ConfigurationTypeName MigrationsConfiguration
If this fails, you are likely to get more useful output by passing `-Debug` than `-Verbose`.
  1. From the command line. Important: You must have successfully built the Gallery (step 3) for this to succeed.
  • Run Update-Databases.ps1 in the tools folder to migrate the databases to the latest version.
    • To Update both databases, Nuget Gallery and Support Request, run this command
      .\tools\Update-Databases.ps1 -MigrationTargets NugetGallery,NugetGallerySupportRequest
    • To update only the Nuget Gallery DB, run this
      .\tools\Update-Databases.ps1 -MigrationTargets NugetGallery
    • And to update only the Support Request DB, run this
      .\tools\Update-Databases.ps1 -MigrationTargets NugetGallerySupportRequest
  • Additionally you can provide a -NugetGallerySitePath parameter to the Update-Databases.ps1 script to indicate that you want to perform the migration on a site other than the one that is built with this repository.
  1. When working with the gallery, e-mail messages are saved to the file system (under ~/App_Data).

    • To change this to use an SMTP server, edit src\NuGetGallery\Web.Config and add a Gallery.SmtpUri setting. Its value should be an SMTP connection string, for example smtp://user:password@smtpservername:25.
    • To turn off e-mail confirmations, edit src\NuGetGallery\Web.Config and change the value of Gallery.ConfirmEmailAddresses to false.
  2. Ensure the 'NuGetGallery' project (under the Frontend folder) is set to the Startup Project

That's it! You should now be able to press Ctrl-F5 to run the site!

Be aware that you might detect a change in the applicationhost.config:

Unfortunately Visual Studio will replace the relative path with an absolute path. The committed applicationhost.config-file is currently the easiest way to setup the for IIS Express.

However, you can force Git to ignore the change with this command:

git update-index --assume-unchanged .vs/config/applicationhost.config

You can undo this with this command:

git update-index --no-assume-unchanged .vs/config/applicationhost.config

This should help to prevent unwanted file commits.


If you find a bug with the gallery, please visit the Issue tracker and create an issue. If you're feeling generous, please search to see if the issue is already logged before creating a new one.

When creating an issue, clearly explain

  • What you were trying to do.
  • What you expected to happen.
  • What actually happened.
  • Steps to reproduce the problem.

Also include any information you think is relevant to reproducing the problem such as the browser version you used. Does it happen when you switch browsers. And so on.

Submit a patch

Before starting work on an issue, either create an issue or comment on an existing issue to ensure that we're all communicating. We have a list of items that are up for grabs and you can start working on (but always ping us beforehand).

To contribute to the gallery, make sure to create a fork first. Make your changes in the fork following the Git Workflow. When you are done with your changes, send us a pull request.

Copyright and License

Copyright .NET Foundation

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the LICENSE file, or at:

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

The Git Workflow

This is the Git workflow we're currently using:

Setting up

  1. Clone and checkout the following branches (to make sure local copies are made): '
  2. '.

When starting a new feature/unit of work.

  1. Pull the latest. Begin by pulling to make sure you are up-to-date before creating a branch to do your work This assumes you have no local commits that haven't yet been pushed (i.e., that you were previously up-to-date with origin).

    git checkout dev
    git pull dev
  2. Create a topic branch to do your work. You must work in topic branches, in order to help us keep our features isolated and easily moved between branches. Our policy is to start all topic branches off of the 'dev' branch. Branch names should use the following format '[user]-[bugnumber]-[shortdescription]'. If there is no bug yet, create one and assign it to yourself!

    git checkout dev
    git checkout -b anurse-123-makesuckless
  3. Do your work. Now, do your work using the following highly accurate and efficient algorithm :)

    1. Make changes.

    2. Test your changes (you're practicing TDD, right?)

    3. Add your changes to git's index.

       git add -A
    4. Commit your changes.

       git commit -m "<description of work>"
    5. if (moreWorkToDo) go to #3.1 else go to #4.

  4. Start a code review. Start a code review by pushing your branch up to GitHub (git push origin anurse-123-makesuckless) and creating a Pull Request from your branch to dev. Wait for at least someone on the team to respond with: ":shipit:" (that's called the "Ship-It Squirrel" and you can put it in your own comments by typing :shipit:).

  5. Merge your changes in to dev. Click the bright green "Merge" button on your pull request! Don't forget to delete the branch afterwards to keep our repo clean.

    If there isn't a bright green button... well, you'll have to do some more complicated merging:

    git checkout dev
    git pull origin dev
    git merge anurse-123-makesuckless
    ... resolve conflicts ...
    git push origin dev
  6. Be ready to guide your change through QA, Staging and Prod Your change will make its way through the QA, Staging and finally Prod branches as it's deployed to the various environments. Be prepared to fix additional bugs!