Harness Artifact Registry provides support for NuGet packages, allowing you to host private .NET libraries and applications.
Overview
NuGet registry features:
- NuGet V3 protocol support
.nupkg package format
- Version management
- Nested directory support for package uploads
- Integration with dotnet CLI and NuGet client
Pushing NuGet packages
Use the hc artifact push nuget command:
hc artifact push nuget <registry-name> <nupkg-file-path> \
--pkg-url <pkg-url>
Optional flags
Path for nested directories within the package. Useful for organizing related packages
Base URL for the package service
Building NuGet packages
Create or update .csproj
Ensure your project file has package metadata:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<PackageId>MyCompany.MyLibrary</PackageId>
<Version>1.0.0</Version>
<Authors>Your Name</Authors>
<Description>My awesome library</Description>
</PropertyGroup>
</Project>
Build the package
Use dotnet CLI to create the .nupkg: Upload to registry
Push the package:hc artifact push nuget my-registry ./bin/Release/MyLibrary.1.0.0.nupkg \
--pkg-url https://app.harness.io/registry/pkg
Installing NuGet packages
Configure NuGet to use your Harness registry:
Add package source
dotnet nuget add source https://<registry-url>/v3/index.json \
--name Harness \
--username <username> \
--password <harness-api-token> \
--store-password-in-clear-text
Install packages
# Install a package
dotnet add package MyCompany.MyLibrary
# Install specific version
dotnet add package MyCompany.MyLibrary --version 1.0.0
Examples
# Build and push a NuGet package
dotnet pack -c Release
hc artifact push nuget my-registry ./bin/Release/MyLib.1.0.0.nupkg \
--pkg-url https://app.harness.io/registry/pkg
NuGet.config configuration
Create a NuGet.config file in your solution or repository root:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="Harness" value="https://<registry-url>/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
<packageSourceCredentials>
<Harness>
<add key="Username" value="your-username" />
<add key="ClearTextPassword" value="your-harness-token" />
</Harness>
</packageSourceCredentials>
</configuration>
Store credentials securely. Use environment variables or credential providers in CI/CD environments.
CI/CD integration
GitHub Actions
Azure Pipelines
- name: Build and publish
run: |
dotnet pack -c Release
hc artifact push nuget my-registry ./bin/Release/*.nupkg \
--pkg-url https://app.harness.io/registry/pkg
env:
HARNESS_API_KEY: ${{ secrets.HARNESS_API_KEY }}
- task: DotNetCoreCLI@2
inputs:
command: 'pack'
configuration: 'Release'
- script: |
hc artifact push nuget my-registry $(Build.ArtifactStagingDirectory)/*.nupkg \
--pkg-url $(PKG_URL)
env:
HARNESS_API_KEY: $(HARNESS_TOKEN)
Package versioning
NuGet uses semantic versioning (SemVer 2.0):
- Release:
1.0.0
- Pre-release:
1.0.0-alpha, 1.0.0-beta.1
- Build metadata:
1.0.0+20231201
Set version in .csproj:
<PropertyGroup>
<Version>1.0.0</Version>
<!-- Or use MSBuild properties -->
<Version>$(GitVersion)</Version>
</PropertyGroup>
Troubleshooting
Verify your credentials are configured:# List configured sources
dotnet nuget list source
# Update credentials
dotnet nuget update source Harness \
--username <username> \
--password <new-token> \
--store-password-in-clear-text
Check the package was uploaded successfully:hc artifact list --registry my-registry --format json
NuGet doesn’t allow re-uploading the same version:# Increment version
dotnet pack -c Release -p:Version=1.0.1
See also