本文首发于码友网--《1分钟极速搭建基于BaGet的轻量级私有Nuget程序包服务器》

概述

大家好,我是专注.NET开发的码友网创建者Rector

在上一篇《NuGet是什么?为什么.NET项目中会有NuGet?如何使用NuGet程序包?》文章中,我们了解了:

  • NuGet是什么?
  • 为什么.NET项目中会有NuGet?
  • 如何使用NuGet程序包?

特别的,文中学习了如何安装基于微软官方托管(nuget.org)的共享NuGet包。

那现在有人可能会问了:“我的程序集是个人或公司内部的,如果以都发布到nuget.org托管,那么不是所有都能下载和引用了吗?有没有可能把个人或公司内部的程序集上传到一个私有的NuGet服务器,只让部分开发者可以访问呢?”

答案是肯定的,你想到的别人也同样遇到了,并且也有一些不错的解决方案,其中之一即是搭建自己的NuGet程序包托管服务。可选的应用组件主要有:NuGet.ServerLiGet等,这里列出的两个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安装

在文中已多次提到极速安装这个动作,那么BaGet的安装到底有那极速呢?让我们一起来体验一下吧!

  1. 安装.NET Core SDK
  2. 下载BaGet程序压缩包,点击这里
  3. 解压刚下载的BaGet程序压缩包,打开命令行,定位到BaGet程序根目录,运行命令dotnet BaGet.dll
  4. 在浏览器中打开地址: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包发布、更新到BaGet服务,我们先来创建一个演示用的C#(.NET 5)类库,并在这个类库中创建一个微信支付类(WeChatPay.cs)及演示支付方法,如图:

再右键单击项目WeChatPay -> 打包,如图:

打包结果如图:

在.nupkg所在目录打开命令提示符工具,执行NuGet包的发布命令,如下:

看到图中所示的“Your package was pushed.”表示NuGet包成功发布到了刚才用BaGet搭建的私有NuGet包服务器。

刷新浏览器地址:http://localhost:5000/ ,NuGet包列表中出现了WeChatPay这个NuGet包,如图:

安装私有NuGet包

将NuGet包成功上传到BaGet搭建的私有服务器之后,便可下载安装和使用了,接下来我们来配置Visual Studio的Nuget包源以添加私有BaGet包源地址。打开Visual Studio的选项 -> NuGet包管理器 -> 程序包源,依次完成下图中的操作:

好了,现在回到Visual Studio的主界面,将上面创建的WeChatPay类库项目删除,只保留ConsoleApp1这个演示用的控制台项目,如图:

右键单击ConsoleApp1项目的依赖项 -> 管理NuGet程序包,如图:

在打开界面的右上角可以看到程序包源的下拉框,下拉列表中会列出上面新增的私有NuGet程序包源的选项,点击选中此项,NuGet列表会自动刷新,之后将看到我们上传的自制程序包WeChatPay,如图:

选中WeChatPay包,点击右侧的安装按钮,以在当前项目中安装此程序包,如图:

再次回到Visual Studio编辑器主界面,现在我们便可以调用WeChatPay这个包中可访问的资源了,如图:

运行结果如图:

更新NuGet包

更新NuGet包其实就一发布一个新版本的NuGet包,这里不再赘述。

后话

笔者认为,本文非常详尽地描述和分享了BaGet搭建私有NuGet服务的全过程。与题目相反,虽然用BaGet搭建私有NuGet服务最少可能只需要1分钟,但写这篇文章可不至啊。

文章从资料整理、内容撰写、示例测试到最后的稿件审阅、发布,花了Rector不少于完整的5个小时(写这类技术文章是真的磨人啊-_-)。

如有什么问题,欢迎评论区留言反馈。

如果你觉得本文有价值,请来个三连(点赞,收藏,评论)吧,谢谢。

03-05 15:10