如何将项目打包上传到NuGet服务器(图文教程)?

作者:西瓜程序猿

主页传送门:juejin.cn/user/119893...

前言

在我写[在.NET Framework中使用RocketMQ(阿里云版)]这篇博客的时候,因为封装了很多代码在单独的DLL中,包括生产者、消费者以及官方SDK等等,然后都在博客中体现出来导致博客大量代码,然后有位读者就建议打包成NuGet包,大家也可以直接安装引入调用,我也觉得很不错,于是就有了这篇文章啦!

那NuGet是什么呢?NuGet是.NET的包管理器,NuGet客户端工具提供了生成和使用包的能力,NuGet库是所有包作者和消费者使用的中心包存储库。那来看一下如何将代码打包上传到NuGet服务器吧!

一、提前准备

1.1-登录NuGet官网

(1)打开官方网址,然后点击【Sign in with Microsoft】使用微软账号登录。

登录网址:www.nuget.org/users/accou...

(2)输入微软邮箱,然后点击【下一步】进行登录。

1.2-创建API Key秘钥

(1)点击右上角用户名称,然后点击【API Keys】。

(2)然后点击【Create】,在输入必填的信息。【KeyName】可以填项目包名,也可以自定义命名,唯一就行了。然后【Glob Pattern】可以填写"*"来替换任何序列。

API密钥是一种令牌,可以向NuGet Gallery识别身份。NuGet命令行实用程序允许使用API密钥向库提交NuGet包以进行身份验证。

注意要对API密钥保密!如果某个密钥意外泄露,可以随时生成一个新密钥。如有必要,还可以删除现有的API密钥。

注意:要将包推送到nuget.org,必须使用nuget.exe v4.1.0或更高版本,它实现了所需的nuget协议。

(3)然后点击【Copy】复制秘钥,请自行将秘钥保存好,后面会用到。

二、创建与打包项目

(1) [西瓜程序猿]创建一个名为【Kimi.RocketMQ.NET】类库,目标框架使用【.NET Framework 4.8】,输出类型为【类库】。

(2)代码编写后,然后使用Release模式生成dll。(我这没有依赖其他任何外部包,如果依赖了,上传打包前需要进行配置)

(3) 打开【AssemblyInfo.cs】文件,设置相关属性值和版本。

(4)为了方便管理文件,我们可以单独新建一个文件夹保存要上传的文件。[西瓜程序猿]这里新建名为【Kimi.RocketMQ.NET】的文件夹。

将编译好的DLL,放在此文件夹。

然后新建一个【readme.md】用来介绍文件,会在包管理中显示此文件的内容

在设计一个ICON(图标需要上传到线上,然后将外网能访问的图片地址进行上传到NuGet),作为nuget包的图标。大小建议是128px或256px(注意:文件格式必须是.png)。

文件夹截图:

三、上传NuGet

西瓜程序猿\]准备了要上传NuGet上传使用的资源包,如果大家要下载最新版请去官网下载。可以访问下载(如果失效了,请联系我)。 > 下载地址(编码:0m7AToKX):[yongteng.lanzoub.com/ip4nN17bdtb...](https://link.juejin.cn?target=https%3A%2F%2Fyongteng.lanzoub.com%2Fip4nN17bdtbi "https://yongteng.lanzoub.com/ip4nN17bdtbi") > > 密码: 5jh4 文件截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/6f485c0a34f7477cb155726afd259b6f.webp) ### 3.1-使用可视化方式【推荐】 #### 3.1.1-下载工具 (1)首页将下载好资源包里面的【PackageExplorer.4.4.72】文件夹,复制到一个固定的地方,不要删除了。\[西瓜程序猿\]放在【D:\\RuanjianAnzhuang\\PackageExplorer.4.4.72】路径下了,我们打开【NuGetPackageExplorer.exe】应用程序。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/5b29b5c03062408ea38fac20190a21d7.webp) 如果需要在官网下载最新版,可以点击这个链接: > 官方下载:[www.microsoft.com/zh-cn/p/nug...](https://link.juejin.cn?target=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2Fp%2Fnuget-package-explorer%2F9wzdncrdmdm3%3Factivetab%3Dpivot%3Aoverviewtab "https://www.microsoft.com/zh-cn/p/nuget-package-explorer/9wzdncrdmdm3?activetab=pivot:overviewtab") (2)然后点击【Create a new package (CtrI+N) 】创建一个新Package。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/452e3031ff014aa8a7b60964565f6641.webp) #### 3.1.2-配置相关包 (1)新增【lib】文件夹。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/7a4b53d45dde487ab56df7f7b1fd31ba.webp) ![image.png](https://file.jishuzhan.net/article/1698516629396131841/3d7e32fa9edc47a98afa437c2796d1be.webp) (2)然后新选择响应的框架版本,会自动创建版本文件夹,比如\[西瓜程序猿\]创建的【Kimi.RocketMQ.NET】包是给.NET Framework使用的,我这边就先创建这些。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/496d2a543c9e4a488dccd2b9a92ec2ca.webp) ![image.png](https://file.jishuzhan.net/article/1698516629396131841/9ac78088844e444aab0514e92688687b.webp) 也可以自己创建文件夹,比如没有4.8版本,那可以自行创建一个为【net48】文件夹。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/f4a18e8551c24391b0fd5ae4058832a6.webp) ![image.png](https://file.jishuzhan.net/article/1698516629396131841/7f79ee362e5f41c99ed5549fd91538b9.webp) (3)然后再每个文件夹中,添加之前打包后的DLL包。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/d18fdbffa4dc4ff1a89c80b1354aaf90.webp) 添加好文件后,目录是这样的: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/9975a6b0609b469f9c74bbb9202a9349.webp) (3)然后编辑上传数据,选择【Edit】------\>【Edit Metadata】,然后填写相关信息。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/001fe6a14c24432db51c3dd0b84ec6ef.webp) ![image.png](https://file.jishuzhan.net/article/1698516629396131841/d00a5fab916a40ebb67755fe060dbe43.webp) (4)然后如果有依赖性,还需添加项目依赖,依赖哪些框架比如.NETFramework,.NETStandard等。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/01ce2f146a6d485890a29c9a07c8ae8c.webp) (5)然后编辑完成,看一下效果。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/aa84d18ae1b44d4e90e05998626063ab.webp) (5)点击这个可以看到配置的源代码。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/25236151006244c4b1a7127fc2cd9197.webp) 代码: ```xml Kimi.RocketMQ.NET 1.0.9 Kimi.RocketMQ.NET 西瓜程序猿 西瓜程序猿 false https://licenses.nuget.org/MIT https://www.cnblogs.com/kimiliucn/p/17662052.html http://xxx.xxx.xxx.192:7980/Temp_Storage/Images/2023-08-31/9dd8dbcccd314a31835c69ea344b0216.png .NET Framework使用RocketMQ(阿里云版)

.NET Framework使用RocketMQ(阿里云版) 发布1.0.9 Copyright © 2023 西瓜程序猿 zh-CN Kimi.RocketMQ.NET ``` (6)点击【File】------\>【Save As】保存nupkg文件。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/e5aef6cc9bf249d9a724304645c2c034.webp) 文件截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/77db2384c2ef4b6abc19c1711cd31cd3.webp) #### 3.3-上传到nuget服务器 (1)点击【File】------\>【Publish】。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/7d47fa75dce940779f8d34cf79815a22.webp) (2)【Publish key or PAT】填写秘钥Key,然后点击【Publish】发布,只要没报错就表示上传成功了。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/7a01e14375f247efa3f9ba80122c93b8.webp) (3)稍等1-3分钟,然后会收到上传成功的邮件通知。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/e9b3060e04a044f58156e5c1cc23edb8.webp) (4)然后可以去官网看看是否此版本发布成功了。 > \[西瓜程序猿\]案例:[www.nuget.org/packages/Ki...](https://link.juejin.cn?target=https%3A%2F%2Fwww.nuget.org%2Fpackages%2FKimi.RocketMQ.NET%2F "https://www.nuget.org/packages/Kimi.RocketMQ.NET/") ![image.png](https://file.jishuzhan.net/article/1698516629396131841/69358f6b171e4f1e8960d87ca2380f6f.webp) ### 3.2-使用命令方式 #### 3.2.1-下载软件配置环境 (1)点击下面地址下载软件,选择比较新的版本即可(如果是通过上面的链接下载了资源包,就可以跳过这一步了,直接看第二步骤)。 > 官网下载:[www.nuget.org/downloads](https://link.juejin.cn?target=https%3A%2F%2Fwww.nuget.org%2Fdownloads "https://www.nuget.org/downloads") ![image.png](https://file.jishuzhan.net/article/1698516629396131841/935f2b8cbf80480c8292df128019027d.webp) 下载好后得到: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/c889db5c35044366871f7a0dc13f21a5.webp) (2)把下载好的【nuget.exe】这个文件,放在一个固定的地方,不要删了。\[西瓜程序猿\]放在这个目录【D:\\RuanjianAnzhuang\\nuget_client】。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/1515b48d1d1c4c4ba9bb8bae403a239d.webp) (3)然后来配置环境变量。点击【此电脑】,右击【属性】------\>高级系统设置------\>环境变量------\>系统变量------\>选择Path------\>编辑------\>新建------\>填写【D:\\RuanjianAnzhuang\\nuget_client】,大家根据自己路径配置哈。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/671c6bd4896d479cb4173b97eff16150.webp) (4)测试是否配置成功。按【win+R】键,然后输入cmd,在输入【nuget】命令查看。 > 命令:nuget 配置成功截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/868d1f3307cd4d5bac9940ecfa7d6dc4.webp) 配置失败截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/ec8a4f7b82184e39a97f5df65aa84039.webp) #### 3.2.2-配置全局Push源地址 配置模拟的push源为nuget.org,输入以下命令: > nuget config -Set DefaultPushSource=nuget.org #### 3.2.3-设置API Key秘钥 使用下面命令进行设置Nuget的API Key(将my_api_key参数替换成自己生成的APIKey) > nuget setApiKey my_api_key 成功截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/9a1cc98c76a4413493983d03dd243fdd.webp) #### 3.2.4-生成nuspec文件 使用【nuget spec】命令生产.nuspec 文件,文件xml格式的。 > 命令:nuget spec 成功截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/d763a2ce76554abb99f3682d815480c5.webp) #### 3.2.5-生成nupkg文件 使用【nuget pack】命令生成.nupkg文件。 > 命令:nuget pack 成功截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/0f609a20dd594e76b85cbf772a560efd.webp) #### 3.2.6-上传到nuget服务器 输入以下命令,可以将.nupkg包上传发布到NuGet服务器上(将my_api_key参数替换成自己生成的APIKey)。 > 命令:nuget push Kimi.RocketMQ.NET.1.0.0.nupkg my_api_key -Source [api.nuget.org/v3/index.js...](https://link.juejin.cn?target=https%3A%2F%2Fapi.nuget.org%2Fv3%2Findex.json "https://api.nuget.org/v3/index.json") 上传成功后的邮件: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/3d840aca5e234210bf2cab4ff87f8ee3.webp) 上传成功后,需要等待10几分钟。官方需要先审核,审核通过后还需要进行重新索引,然后还需要同步。等待10多分钟后,就可以搜索到上传的包了。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/f2d2cf5765e04e37a541a38847503384.webp) ## 四、NuGet包的管理 ### 4.1-删除NuGet包 NuGet包无法删除,但是隐藏对应的版本。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/8b99b4738a64467380684398e708c8be.webp) 选择要隐藏的版本后,然后取消勾选【List in search results】,然后点击【Save】保存即可。 ![image.png](https://file.jishuzhan.net/article/1698516629396131841/d40a623214504dd4b4d67e4e79e421f8.webp) 效果(隐藏后就搜索不到1.0.0的版本了):![image.png](https://file.jishuzhan.net/article/1698516629396131841/f195241666a94bbbbe6554dc03237c80.webp) ## 五、防踩坑指南 ### 5.1-响应状态代码不指示成功: 403 详细错误: > 响应状态代码不指示成功: 403 (The specified API key is invalid, has expired, or does not have permission to access the specified package.)。 解决方案:提示秘钥Key无效或者过期了,可以去后台重新生成一个,按照【1.2】步骤操作。 ### 5.2-This package has not been indexed yet 详细错误: > This package has not been indexed yet. It will appear in search results and will be available for install/restore after indexing is complete. 错误截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/af08dd024d814e4b894c75ac42bdd501.webp) 解决方案:错误提示说"此程序包尚未编制索引。它将出现在搜索结果中,并可在索引完成后进行安装/还原"。所以需要等10分钟左右就行了,等程序包编制好索引就可以在NuGet客户端搜索到了。 ### 5.3-在以下主源中找不到包"Kimi.RocketMQ.NET 1.0.5" 详细错误: > 在以下主源中找不到包"Kimi.RocketMQ.NET 1.0.5":"[api.nuget.org/v3/index.js...](https://link.juejin.cn?target=https%3A%2F%2Fapi.nuget.org%2Fv3%2Findex.json "https://api.nuget.org/v3/index.json")"。请验证你的所有联机包源是否都可用,以及是否正确指定了包 ID、版本。 解决方案:等待10分钟左右就能找到了。因为上传成功后需要进行编制索引、同步等操作。 ### 5.4-响应状态代码不指示成功: 409 详细错误: > 响应状态代码不指示成功: 409 (A package with ID 'Kimi.RocketMQ.NET' and version '1.0.5' already exists and cannot be modified.)。 错误截图: ![image.png](https://file.jishuzhan.net/article/1698516629396131841/6c343c950e454ec3bbd177703874ddb8.webp) 解决方案:说明这个【1.0.9】的版本已经存在了,修改版本号重新发布即可。 > 版权声明:本文为原创文章,版权归 \[西瓜程序猿\] 所有,转载请注明出处,有任何疑问请私信咨询。 > > 原文链接:[juejin.cn/post/727416...](https://juejin.cn/post/7274163003157757952 "https://juejin.cn/post/7274163003157757952")

相关推荐
mortimer6 小时前
零依赖、高效率的语音转文字c++版 whisper.cpp (附批量处理脚本)
开源·github
sulikey10 小时前
从零配置一个规范的 Python Git 仓库(适用于 Gitee / GitHub)
git·python·pycharm·gitee·github
whysqwhw10 小时前
KuiklyUI声明式组件体系的实现分析
github
whysqwhw10 小时前
ComposeView 的上下游继承关系及相关类/接口分析
github
逛逛GitHub11 小时前
登上 GitHub 热榜!一口气调用多个 AI 大模型开源神器。
github
21号 112 小时前
4.客户端(Redis)
开发语言·数据库·github
学渣6765612 小时前
【面向小白】git rebase全面总结,什么时候用rebase
git
梦想CAD控件12 小时前
网页CAD中组(Group)功能的二次开发
前端·javascript·github
米诺zuo13 小时前
不同的项目仓库配置不同的github账号
github
小龙报13 小时前
《算法每日一题(1)--- 第31场蓝桥算法挑战赛》
c语言·开发语言·c++·git·算法·学习方法