本文首发于码友网--《1分钟极速搭建基于BaGet的轻量级私有Nuget程序包服务器》
概述
大家好,我是专注.NET开发的码友网创建者Rector。
在上一篇《NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?》文章中,我们了解了:
- NuGet是什么?
- 为什么.NET项目中会有NuGet?
- 如何使用NuGet程序包?
特别的,文中学习了如何安装基于微软官方托管(nuget.org)的共享NuGet包。
那现在有人可能会问了:“我的程序集是个人或公司内部的,如果以都发布到nuget.org托管,那么不是所有都能下载和引用了吗?有没有可能把个人或公司内部的程序集上传到一个私有的NuGet服务器,只让部分开发者可以访问呢?”
答案是肯定的,你想到的别人也同样遇到了,并且也有一些不错的解决方案,其中之一即是搭建自己的NuGet程序包托管服务。可选的应用组件主要有:NuGet.Server、LiGet等,这里列出的两个NuGet包服务器应用组件均是开源的,可以免费下载和使用。
本文主要为大家分享如何使用BaGet极速搭建属于自己的私有NuGet包服务器,如何发布、更新私有NuGet包到BaGet服务器,如何在Visual Studio中的NuGet包管理器的程序包源配置中添加BaGet源等技术。
BaGet极速搭建NuGet包服务
BaGet简介
如上文所述,BaGet是一个开源的、轻量级的NuGet包服务器应用组件。BaGet源码托管地址为:https://github.com/loic-sharm... 。
BaGet是基于.NET Core开发的NuGet包服务器应用组件,因此需要运行环境安装.NET Core SDK,BaGet具有以下特性:
- 极速部署
- 支持跨平台
- 支持docker容器化部署
- 支持云存储
- 支持离线缓存
- 支持包硬删除
- 配置持久化支持多种数据库类型
BaGet安装
注:以下安装在Windows操作系统中演示。
在文中已多次提到极速安装这个动作,那么BaGet的安装到底有那极速呢?让我们一起来体验一下吧!
- 安装.NET Core SDK
- 下载BaGet程序压缩包,点击这里
- 解压刚下载的BaGet程序压缩包,打开命令行,定位到BaGet程序根目录,运行命令
dotnet BaGet.dll
- 在浏览器中打开地址:http://localhost:5000/
怎么样,是不是超级简单、超级快捷呢!!!
运行命令示意图:
浏览器中看到的效果如图:
从图中可以看到,BaGet默认监听了5000
端口,如果你需要修改端口,则打开appsettings.json配置文件,将kestrel
配置选项的注释去掉,然后修改端口号为自己需要的即可,如下:
// Uncomment this to configure BaGet to listen to port 8080.
// See: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps
"kestrel": {
"endpoints": {
"http": {
"url": "http://localhost:5555"
}
}
}
特别注意:以上以dotnet BaGet.dll
方式运行的BaGet包服务还没有设置API密钥,也就是说任何知道BaGet地址的人都是可以对其进行操作,如发布包,更新包,删除包等。所以,为了安全起见,建议为你的私有BaGet包服务配置一个API密钥。配置方式也非常简单,还是打开appsettings.json配置文件,修改选项,如下:
{
"ApiKey": "NUGET-SERVER-API-KEY", // 这里修改成你的密钥即可(任意字符串)
//...
}
更多BaGet的配置,请见BaGet官网配置说明
发布程序包到BaGet服务
如下图所示:
首先,点击图中①所示的Upload按钮,界面将切换到上传NuGet包界面,这里展示了几个重要的信息:
- BaGet包服务索引的地址为图中②标注的地址
- 使用4种不同的命令行(分别为:.NET CLI, NuGet CLI, Paket CLI, PowerShellGet)发布NuGet包
注:如果你不喜欢命令行的方式发布NuGet包,推荐使用NuGet Package Explorer发布、更新NuGet包,可以在Windows 10的应用商店下载、安装NuGet Package Explorer。
使用命令行发布NuGet包的命令如标记③所示。
为了演示如何将自制NuGet包发布、更新到BaGet服务,我们先来创建一个演示用的C#(.NET 5)类库,并在这个类库中创建一个微信支付类(WeChatPay.cs)及演示支付方法,如图:
再右键单击项目WeChatPay -> 打包,如图:
打包结果如图:
在.nupkg所在目录打开命令提示符工具,执行NuGet包的发布命令,如下:
注:本示例并未设置API密钥,如果你设置了BaGet的API密钥,请在发布命令中附加API密钥的参数(-k),如:
dotnet nuget push -s http://localhost:5000/v3/index.json -k NUGET-SERVER-API-KEY WeChatPay.1.0.0.nupkg
看到图中所示的“Your package was pushed.”表示NuGet包成功发布到了刚才用BaGet搭建的私有NuGet包服务器。
刷新浏览器地址:http://localhost:5000/ ,NuGet包列表中出现了WeChatPay这个NuGet包,如图:
安装私有NuGet包
将NuGet包成功上传到BaGet搭建的私有服务器之后,便可下载安装和使用了,接下来我们来配置Visual Studio的Nuget包源以添加私有BaGet包源地址。打开Visual Studio的选项 -> NuGet包管理器 -> 程序包源,依次完成下图中的操作:
步骤2:点击+号,新增一个程序包源项
步骤3:选中步骤2中新增的项,在3处的广西框中填入程序包源的名称(可任意取名)
步骤4:填入私有NuGet包的服务索引地址
步骤5:点击 更新按钮,以更新程序包源的信息
步骤6:点击 确定按钮,以保存新增的程序包源信息
好了,现在回到Visual Studio的主界面,将上面创建的WeChatPay类库项目删除,只保留ConsoleApp1这个演示用的控制台项目,如图:
右键单击ConsoleApp1项目的依赖项 -> 管理NuGet程序包,如图:
在打开界面的右上角可以看到程序包源的下拉框,下拉列表中会列出上面新增的私有NuGet程序包源的选项,点击选中此项,NuGet列表会自动刷新,之后将看到我们上传的自制程序包WeChatPay,如图:
选中WeChatPay包,点击右侧的安装按钮,以在当前项目中安装此程序包,如图:
再次回到Visual Studio编辑器主界面,现在我们便可以调用WeChatPay这个包中可访问的资源了,如图:
运行结果如图:
更新NuGet包
更新NuGet包其实就一发布一个新版本的NuGet包,这里不再赘述。
后话
笔者认为,本文非常详尽地描述和分享了BaGet搭建私有NuGet服务的全过程。与题目相反,虽然用BaGet搭建私有NuGet服务最少可能只需要1分钟,但写这篇文章可不至啊。
文章从资料整理、内容撰写、示例测试到最后的稿件审阅、发布,花了Rector不少于完整的5个小时(写这类技术文章是真的磨人啊-_-)。
如有什么问题,欢迎评论区留言反馈。
如果你觉得本文有价值,请来个三连(点赞,收藏,评论)吧,谢谢。