使用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服务。演示了如果下载一个包到项目并使用它。总体体验其实一般般,个人觉得有几个小问题:
- 上传的包并不会出现在nuget.org官方源里面。不出现在官方源里面的话其他项目要使用这个包就会相当麻烦。毕竟大家都喜欢使用nuget管理程序来安装包,使用cli的话会比较麻烦。
- 不知道是不是墙的问题,上传包跟安装包都碰到了比较严重的网络问题,如果没有FQ工具的话会很麻烦,当然这不是Github的锅。
使用Github Packages功能上传nuget包到Github的更多相关文章
- 为 .net 生态贡献力量——制作并上传 nuget 包(内有独家彩蛋)
		前言 nuget 是 .net 的常用包管理器,目前已经内置到 Visual Studio 2012 以后的版本.大多数 .net 包都托管在 nuget.org,包括 .net core 框架基础包 ... 
- 【原创】使用批处理脚本自动生成并上传NuGet包
		Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ... 
- 手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行
		新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ... 
- git入门学习(一):github for windows上传本地项目到github
		Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法.Github发布了Github for Windows 则大大降低了学习成本和使用难度,他甚至比SVN都简单. 一.首先在g ... 
- 半小时学会上传本地项目到github
		半小时学会上传本地项目到github 闲着无聊写给那些正在学习怎么上传本地项目到github的同学. 开始学习 一.创建github账号 好吧,这步多余了. 二.创建个人仓库 三.配置SSH keys ... 
- win10 uwp 上传Nuget 让别人用我们的库
		Nuget 我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全? 当我们的库更新的时候,我们又需要从网上搜索,这样不好,于是我们就用Nu ... 
- github入门到上传本地项目【网上资源整合】
		[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ... 
- github入门到上传本地项目
		GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好. GitHub可以免费使用,并且快速稳定.即使是付费帐户,每个月不超过10美刀的费用也非常便宜. ... 
- 【github&&git】2、github入门到上传本地项目
		[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ... 
随机推荐
- python djangjo 文件上传
			视图: request.GET 获取数据 request.POST 提交数据 request.FILES 获取文件用 checkbox 等多选的内容 request.POST.getlist ... 
- curl模拟
			header('content-type:text/html;charset=utf-8');function curlPost($url,$data,$method){ $ch = curl_ini ... 
- (四)mybatis缓存、事务、插件的基本知识
			mybatis缓存.事务.插件的基础 一.缓存 (一)一级缓存与二级缓存 一级缓存 为了获得更好的性能,最重要的就是一级缓存.每个session对象维持一个一级缓存,session对象创建时缓存创建, ... 
- Myeclipse 错误An internal error has occurred 解决办法
			1. 给MyEclipse的快捷方式加个参数再重新启动一次. 步骤如下:右键选中快捷方式属性选项,在快捷方式页,目标一项最后加上-clean选项,如"C:\MyEclipse6\e ... 
- Contour等高线图代码
			import matplotlib.pyplot as plt import numpy as np def f(x,y): # the height function return (1 - x / ... 
- windows 右键新建html文档
			1.win+R 输入 regedit 启动注册表 2.HKEY_CLASSES_ROOT->.html 3.右键新建-项 名为:ShellNew 4.在右侧空白区右键新建字符串值FileName ... 
- 会编程的 AI + 会修 Bug 的 AI,等于什么 ?
			2017-02-25 Python开发者 (点击上方公众号,可快速关注) 关于人工智能未来的畅想,除了家庭服务机器人,快递无人机,医用机器人等等,Lucas Carlson 认为人工智能在另外一个领域 ... 
- Html的label和span的区别
			从最终效果来看,label与span标签显示方式及作用都一样的但由于label中有for属性的存在,也有着决定性的不同 for属性将label和表单进行配对 label标签通常是写在表单(form)内 ... 
- Android开发常见错误
			1.出现 “Unable to resolve target 'android-9'”,解决办法: 一般移植别人工程会出现此错误. 右键项目文件--->properties--->andr ... 
- Vue.observable()使用方法
			前言 随着组件的细化,就会遇到多组件状态共享的情况, Vuex当然可以解决这类问题,不过就像 Vuex官方文档所说的,如果应用不够大,为避免代码繁琐冗余,最好不要使用它,今天我们介绍的是 vue.js ... 
