概述
在私有服务器上搭建Nuget服务,本地打包推送nuget包,实现对.net core项目自定义包的管理。
NuGet是用于微软.NET(包括 .NET Core)开发平台的软件包管理器。NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。
我们通过“工具-Nuget包管理器-管理解决方案的Nuget程序包”可以看到下图的页面,可以从网上搜索我们需要的nuget包,也可以查看项目已安装的包和对已安装的包进行更新。
正常情况下我们都是从默认地址nuget.org搜索我们需要的包,并且可以将我们自己创建的包上传到该地址使所有人可见。
如果我们需要对自己的项目进行管理,并且不希望所有人都能看到这些包的内容,就可以创建自己的nuget包管理服务器。
搭建nuget服务
搭建nuget服务有很多种方式,网站有很多教程,比如自己创建MVC项目,安装nuget.server包,就可以创建服务。但是我自己尝试了并没有成功,可能是由于.net framework 和.net core的区别,这种方法可能只适用于.net framework,具体原因没有过多尝试。
因此找到了基于ASP.NET Core的一个开源项目Baget,成功实现了功能。
Baget服务
开源项目github地址:https://github.com/loic-sharma/BaGet
release包下载地址:https://github.com/loic-sharma/BaGet/releases/download/v0.3.0-preview4/BaGet.zip
下载完成后解压,得到下面的文件。
修改appsetting.json配置文件文件
上图中是比较重要的几个参数,
- “ApiKey”是密钥,每次推送或者删除Nuget包时都需要输入这个代码;
- “Urls”是路由地址和端口号,原来是5000,需要改为8020;
- “PackageDeletionBehavior"是删除方式,默认“Unlist”,删除时不会将源文件删除,只是在前端显示时看不到了,这会导致再次推送同一个包时报错,所以这改为"harddelete”,将原来的包彻底删除。
- "AllowPackageOverwrites"是是否允许覆盖,默认“false”,不允许覆盖,改为true之后推送新的包会将原来的包覆盖掉。
开启nuget服务
在该路径下打开命令行,输入 dotnet BaGet.dll
出现上图的提示,证明服务打开成功。打开浏览器,输入http://localhost:8020/
,会出现下面的页面,显示本地的nuget包,以及如何上传包。
在命令行工具按Ctrl+C
关闭服务。
这是在本地打开baget服务的方案,下面说明在服务器部署baget服务,并在本地向服务器推送包。
服务器搭建后台
在服务器搭建baget后台服务的步骤和普通发布的项目在服务器运行一样,通过IIS管理器新建网站,选择release包的路径,设置端口号,启动应用程序运行池,在防火墙的入站规则将这个端口号开放,这样服务器上可外部访问的服务就搭建好了,详细步骤可以参考另一篇文章
https://blog.csdn.net/AI_eye/article/details/113128491本地部署IIS服务及MQTT服务
搭建好服务之后,在本地输入后台地址可以打开包管理页面。
管理nuget包
服务搭建好之后,就要将自己的包推送到服务器上。
设置私有nuget服务器地址
在VS软件中,选择“工具-Nuget包管理器-程序包管理器设置”,选择程序包源,
第一个nuget.org就是默认我们通过网络获取程序包的地址,第二个是我新添加的本地的nuget包地址,方法是点击 “+”,新增源。在名称中输入我们为这个源起的名字,源中输入路由地址,这个地址可以在服务的网页上看到,如果是添加服务器源的话,就将IP改为对应的地址就好。
命令行
现在一切准备就绪,只需要把我们要推送的包推到服务器地址就行。
打包:在我们要打包的项目右键-打包,可以在输出框中看到“已成功创建包…”的字样,打开这个路径,就可以看到我们新创建的 xxx.nupkg文件,在该路径下打开命令行工具。
推送包:命令行输入dotnet nuget push -s http://localhost:8020/v3/index.json xxx.nupkg
,就可以把包推送到我们本地的服务上。
推送成功。可以在页面上进行查看。
同时在本地Baget目录下的packages文件夹中可以看到这个包。
删除包:命令行输入dotnet nuget delete -s http://localhost:8020/v3/index.json xxx 1.0.0
,就可以把服务器上的包删除掉,注意这里只写“包名 版本号”就行,“.nupkg”的后缀也不用加。
删除成功。
- 需要注意这里的命令是在配置文件中没有设置密钥的情况下,如果设置了就需要在命令行中加入密钥才可以执行操作。
设置包的信息:在项目右键属性,选择打包,在里面可以设置版本号,作者等信息。
下载自己推送的包
包已经被推送到服务器上了,下面就是当我们需要的时候下载它。
在“工具-Nuget包管理器-管理解决方案的Nuget程序包”中最右边“程序包源”选择我们自己创建的"MyNuGet",就可以在左边看到我们已经推送的包,点击包在右侧会出现包的信息,选择版本,进行下载。
关于包的依赖关系,如果A包依赖B包,我们将两个包都已经推送到服务器,那么在我们下载A包时,会自动也下载B包。如果服务器上只有A包,那么在下载时就会报错,找不到B包。
关于包的加密,为了保障包的安全,防止下载 后对包进行反编译,需要进行一些保护,但目前还没有找到比较好的方式,待添加。