欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-06 12:27:54
前几天微软收购npm的新闻对于软粉来收很是振奋。微软收购npm很可能是为了加强Github Packages。目前Github,Typescript,VSCode,npm这些开源社区的重磅工具全部都在微软旗下,显示出了微软对开源的态度,微软已经不是以前那个封闭的微软。Github推出Github P... ......

前几天微软收购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 Packages功能上传nuget包到Github

在github上申请access token

在github上申请一个新的access token。这个token是用来上传package的凭证,后面需要配置。登录github后点击个人头像-settings-developer settings-personal access tokens-generate new token,然后勾选packages的权限后点generate token按钮生成token。复制好这个token,不要丢了,因为你关闭这个页面后,后面就再也找不回这个token了。
使用Github Packages功能上传nuget包到Github

新建一个.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文件,并且配置它。
使用Github Packages功能上传nuget包到Github
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功能上传nuget包到Github

上传包到github packages

使用dotnet cli进行上传

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

使用Github Packages功能上传nuget包到Github
这里可能要多试几次,有的时候会提示401的错误。
上传成功后回到github网站刷新下看看higithubpackage仓库。可以看到我们的包已经出现在上面。

新建一个.net core控制台项目higithubpackagetest

新建另外一个core项目,这个项目要引用我们上传成功的包并使用它。
使用dotnet cli来安装这个包

dotnet add higithubpackagetest package higithubpackage --version 1.0.0

这里也要多试几次,同样会出现401的问题。最后我挂上fq工具才安装成功。
使用Github Packages功能上传nuget包到Github
修改program类来使用这个包。

  class program
    {
        static void main(string[] args)
        {
            higithubpackage.githubpackage.hi();

            console.readline();
        }
    }

运行一下成功的输入了“hi githubpackage ~”,说明成功的引用了higithubpackage这个包。
使用Github Packages功能上传nuget包到Github

一些小问题

通过以上一些了操作我们演示了如果上传一个包到github packages服务。演示了如果下载一个包到项目并使用它。总体体验其实一般般,个人觉得有几个小问题:

  1. 上传的包并不会出现在nuget.org官方源里面。不出现在官方源里面的话其他项目要使用这个包就会相当麻烦。毕竟大家都喜欢使用nuget管理程序来安装包,使用cli的话会比较麻烦。
  2. 不知道是不是墙的问题,上传包跟安装包都碰到了比较严重的网络问题,如果没有fq工具的话会很麻烦,当然这不是github的锅。