使用Github Packages功能上傳nuget包到Github


前幾天微軟收購npm的新聞對於軟粉來收很是振奮。微軟收購npm很可能是為了加強Github Packages。目前Github,Typescript,VSCode,npm這些開源社區的重磅工具全部都在微軟旗下,顯示出了微軟對開源的態度,微軟已經不是以前那個封閉的微軟。Github推出Github Packages功能有一段時間了,一直沒使用過,今天有空打算折騰一下,體驗一下。

什么是Github Packages

Github Packages是一個包承載服務,它完全跟Github集成。Github Packages使你的源碼和包在同一個地方進行統一的管理,使你可以集中的在Github上開發跟發布。你可以發布公共包(public packages)跟所有人分享,也可以發布私有包(private packages)提供給個人或者組織使用。以上是對官方文檔的簡單翻譯。說簡單點就是以前你代碼是在Github,但是包可能是在npm,maven或者nuget上,現在你在Github上傳代碼后還可以直接把包也上傳到Github,方便統一管理,發布。

在Github Packages上發布包

下面讓我們開始嘗試使用Github Packages發布一個包吧。

在Github上新建一個倉庫HiGithubPackage

新建一個公共的倉庫命名HiGithubPackage

在Github上申請Access Token

在Github上申請一個新的Access Token。這個Token是用來上傳Package的憑證,后面需要配置。登錄Github后點擊個人頭像-Settings-Developer settings-Personal access tokens-Generate new token,然后勾選packages的權限后點Generate token按鈕生成token。復制好這個token,不要丟了,因為你關閉這個頁面后,后面就再也找不回這個token了。

新建一個.net Core項目HiGithubPackage

使用Visual studio新建一個core標准庫項目。新建一個類,這個類里只有一個靜態方法Hi,調用的話會輸出一行Hi GithubPackage ~。我打算把這個庫上傳到Github Packages上去。

   public class GithubPackage
    {
        public static void Hi ()
        {
            Console.WriteLine("Hi GithubPackage ~");
        }
    }

順手把代碼也push到github上去吧。

git push -u origin master

新建一個nuget.config文件

在項目文件夾下新建一個nuget.config文件,並且配置它。

OWNER填寫你Github的用戶名
UserName填寫你Github的用戶名
Token填寫上面申請的access token
以下是我的配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://nuget.pkg.github.com/kklldog/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="kklldog" />
            <add key="ClearTextPassword" value="xxx" />
        </github>
    </packageSourceCredentials>
</configuration>

修改包信息並打包

在Visual studio上右鍵項目,選擇編輯項目文件。我們在csproj文件下編輯包信息。其中包含包的id,版本,授權等,比較簡單一看就明白了。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>HiGithubPackage</PackageId>
    <Version>1.0.0</Version>
    <Authors>minjie.zhou</Authors>
    <Description>Test upload to github packages</Description>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <RepositoryUrl>https://github.com/kklldog/HiGithubPackage</RepositoryUrl>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

</Project>

修改完后ctrl-b一下進行一次編譯。編譯完后在bin\debug下會生成一個.nupkg的包文件。

上傳包到Github packages

使用dotnet cli進行上傳

dotnet nuget push "bin/debug/HiGithubPackage1.0.0.nupkg" --source "github"


這里可能要多試幾次,有的時候會提示401的錯誤。
上傳成功后回到Github網站刷新下看看HiGithubPackage倉庫。可以看到我們的包已經出現在上面。

新建一個.net Core控制台項目HiGithubPackageTest

新建另外一個core項目,這個項目要引用我們上傳成功的包並使用它。
使用dotnet cli來安裝這個包

dotnet add HiGithubPackageTest package HiGithubPackage --version 1.0.0

這里也要多試幾次,同樣會出現401的問題。最后我掛上FQ工具才安裝成功。

修改Program類來使用這個包。

  class Program
    {
        static void Main(string[] args)
        {
            HiGithubPackage.GithubPackage.Hi();

            Console.ReadLine();
        }
    }

運行一下成功的輸入了“Hi GithubPackage ~”,說明成功的引用了HiGithubPackage這個包。

一些小問題

通過以上一些了操作我們演示了如果上傳一個包到Github Packages服務。演示了如果下載一個包到項目並使用它。總體體驗其實一般般,個人覺得有幾個小問題:

  1. 上傳的包並不會出現在nuget.org官方源里面。不出現在官方源里面的話其他項目要使用這個包就會相當麻煩。畢竟大家都喜歡使用nuget管理程序來安裝包,使用cli的話會比較麻煩。
  2. 不知道是不是牆的問題,上傳包跟安裝包都碰到了比較嚴重的網絡問題,如果沒有FQ工具的話會很麻煩,當然這不是Github的鍋。

關注我的公眾號一起玩轉技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM