GitHub | Deploy .net core NuGet Packages in GitHub Packages Registry
Introduction
GitHub packages registries is most popular now a days. It offers different packages registries for most used package managers, such as NuGet, npm, Docker etc. In this article, I will show you how to host a .net core NuGet Package in GitHub Packages Registry.
Tools and Technology uses
- Visual Studio 2022
- .NET 6
- C#
- GitHub
Implementation
Step 1: Create a personal access token (PAT) from GitHub
- Login into you GitHub
- Go to settings -> Developer Settings -> Personal Access Tokens
- Click “Generate new token” button
- Type Note for the token, expiration days
Select scope for the token – here I have selected repo, write:packages, delete:packages as shown below.
- Now click “Generate Toke” at the bottom of the panel
Copy the token and store the token for further use because you cannot find it later
Step 2: Add Nuget Source in visual studio
- Type the following command to add source
1
dotnet nuget add source https://nuget.pkg.github.com/hbolajraf/index.json --name github-hbolajraf --username hbolajraf --password <Your personal Access Token>
You will see a source is added in C:\Users\hbolajraf\AppData\Roaming\NuGet\NuGet.Config file
- Optional: You can also add source from visual studio Tools -> Options -> NuGet Package Manager -> Package Sources
- Restart visual studio to get new nuget package source
Step 3: Create a class library to publish in GitHub Packages
- Create a class library name – ‘CryptoEngine”
- Create a class CryptoGenerator as follows
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Security.Cryptography;
using System.Text;
namespace CryptoEngine
{
public class CryptoGenerator
{
public static string GenerateSha256Hash(string plainText)
{
// Create a SHA256
using (SHA256 sha256Hash = SHA256.Create())
{
// ComputeHash - returns byte array
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(plainText));
// Convert byte array to a string
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
}
}
- Click right button on class library project -> Package -> General
- Mark “Produce a package file during build operations”
- Type Package ID, Package Version, Authors, Company, Product, Description
- Type repository URL – A github repository and save
- Now you will see the csproj file as follows
CryptoEngine.csproj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>hbolajraf.CryptoEngine</PackageId>
<Version>1.0.0</Version>
<Authors>hbolajraf hasan</Authors>
<Company>hbolajraf.NET</Company>
<Product>CryptoEngine</Product>
<Description>Chipper text generator</Description>
<RepositoryUrl>https://github.com/hbolajraf/public-packages</RepositoryUrl>
</PropertyGroup>
</Project>
Step 4: Create a NuGet Package
- Click right button on project and select Pack
- A NuGet package will be generated in bin/Debug folder – In this case the nuget package name is hbolajraf.CryptoEngine.1.0.0.nupkg
- Or, Go to the directory where .csproj file exists and right the following command to generate nuget package
1
dotnet pack
Step 5: Push NuGet package to GitHub Package Registry
- Go to the directory where package generated – bin/Debug in this case.
- Type following command
1
dotnet nuget push .\hbolajraf.CryptoEngine.1.0.0.nupkg --api-key <your github access token> --source github-hbolajraf
Here github-hbolajraf is my nuget source name for visual studio. Already added in step 2.
- Now login to your Github account and go to Packages tab, you will see a package is uploaded. In this case package name is hbolajraf.CryptoEngine
Step 6: Use already uploaded package in a project
- If Nuget package source is not added, add it using step – 2
- Go to package manager console
- Select Package Source as “github-hbolajraf” and type following command
1
PM> Install-Package hbolajraf.CryptoEngine
- Or right button on project -> Manage Nuget Packages
- Select Package source “github-hbolajraf”
- Browse and install package hbolajraf.CryptoEngine
This post is licensed under CC BY 4.0 by the author.