Edit

Publish NuGet packages from the command line (dotnet)

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

This guide walks you through configuring your project to publish NuGet packages using the dotnet command-line interface.

Prerequisites

Product Requirements
Azure DevOps - An Azure DevOps organization.
- An Azure DevOps project.
- An Azure Artifacts feed.
- Download and install the .NET SDK version 9.0.200 or later.

Set up the Azure Artifacts Credential Provider

To authenticate with your feed, you must first install the Azure Artifacts Credential Provider. Using the tool installer included with dotnet, you can install the credential provider from the CLI using the following command:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool

If your repository-level nuget.config is configured to use only Azure Artifacts sources, run the install command from outside that directory, or explicitly set nuget.org as the source:

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --source https://api.nuget.org/v3/index.json

Optionally, pin the tool to a major version (for example, in container images where reproducibility matters):

dotnet tool install --global Microsoft.Artifacts.CredentialProvider.NuGet.Tool --version 2.* --source https://api.nuget.org/v3/index.json

First usage

The first time you perform an operation that requires authentication, use one of the following approaches:

  1. Run the command with --interactive so dotnet can prompt you to sign in. This is the recommended approach for most local development scenarios.

Before you run an interactive command, make sure your project is set up and your feed is added to nuget.config. For setup details, see project setup.

Once your project is set up and connected to your feed, navigate to your project directory and run:

dotnet restore --interactive

This command signs you in and acquires a session token. After sign-in succeeds, you can run authenticated commands without --interactive while the cached session token remains valid. For more information, see Session token cache locations.

  1. For non-interactive scenarios, such as Docker containers and custom automation, provide credentials through environment variables.

For Azure Pipelines, use the NuGetAuthenticate@1 task to authenticate to your feed before running commands such as dotnet restore or dotnet nuget push. See Restore NuGet packages with Azure Pipelines for more details.

Create a feed

If you already have a feed, proceed to the next step. Otherwise, follow the instructions below to create a new one:

  1. Sign in to your Azure DevOps, and navigate to your project.

  2. Select Artifacts, and then select Create Feed.

  3. Enter a descriptive Name for your feed and define its Visibility (who can use your feed). Specify the Scope of your feed, and if you wish to include packages from public sources, check the Include packages from common public sources checkbox.

  4. Select Create when you're done.

Connect to a feed

Before you can publish packages to your feed, you must authenticate with Azure Artifacts. Follow the instructions below to set up your project and authenticate with your feed:

  1. Sign in to your Azure DevOps organization, and then navigate to your project.

  2. Select Artifacts, and then select your feed from the dropdown menu.

  3. Select Connect to feed, and then select dotnet from the NuGet section on the left.

  4. Create a nuget.config file in the same folder as your csproj or sln file. Copy the following XML snippet and paste it into your new file, replacing the placeholders with the relevant information:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="<FEED_NAME>" value="https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" />
  </packageSources>
</configuration>
  1. Sign in to your Azure DevOps server, and then navigate to your project.

  2. Select Artifacts, and then select your feed.

  3. Select Connect to Feed, and then select dotnet from the left navigation pane.

  4. Follow the instructions in the Project setup section to connect to your feed.

    A screenshot showing how to connect to a feed with dotnet in Azure DevOps Server 2020 and 2022.

Publish packages to a feed in the same organization

Run the following command to publish a package to your feed. Replace the placeholders with the appropriate values:

dotnet nuget push --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING> <PACKAGE_PATH> 

Example:

dotnet nuget push --source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --api-key AZ bin/MyPackage.5.0.2.nupkg

Note

The api-key parameter is required when publishing to an Azure Artifacts feed, but you can use any string as its value.

Publish packages to a feed in a different organization

To publish your NuGet packages to a feed in a different Azure DevOps organization, you must first create a personal access token (PAT) in the target organization, add the new package source to your configuration file, and then run the publish command:

  1. Navigate to the organization hosting the target feed and create a personal access token (PAT) with Packaging > Read & write scope.

  2. Replace the <PERSONAL_ACCESS_TOKEN> placeholder with your personal access token, and then run the following command to add your package source to your nuget.config file. Ensure that this file is stored securely and is not checked into source control.

    dotnet nuget add source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --name <SOURCE_NAME> --username <USER_NAME> --password <PERSONAL_ACCESS_TOKEN> --configfile <PATH_TO_NUGET_CONFIG_FILE>
    
  3. Run the following command to publish your package:

    dotnet nuget push --source <SOURCE_NAME> --api-key <ANY_STRING> <PACKAGE_PATH>
    

Example:

dotnet nuget add source https://pkgs.dev.azure.com/MyOrg/MyProject/_packaging/MyFeed/nuget/v3/index.json --name MySource --username MyUserName --password MyPersonalAccessToken --configfile ./nuget.config

dotnet nuget push --source MySource --api-key AZ nupkgs/mypackage.1.1.0.nupkg

Note

If your organization uses a firewall or proxy server, make sure that the Azure Artifacts Domain URLs and IP addresses are allowed.