如何将项目打包上传到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")

相关推荐
LCY13317 分钟前
spring 中的DAO是什么
运维·git·jenkins
uhakadotcom1 小时前
云计算与开源工具:基础知识与实践
后端·面试·github
uhakadotcom2 小时前
BPF编程入门:使用Rust监控CPU占用
后端·面试·github
uhakadotcom2 小时前
GHSL-2024-252: Cloudflare Workers SDK 环境变量注入漏洞解析
后端·面试·github
uhakadotcom2 小时前
GHSL-2024-264_GHSL-2024-265: 了解 AWS CLI 中的正则表达式拒绝服务漏洞 (ReDoS)
后端·面试·github
uhakadotcom2 小时前
了解Chainlit:简化AI应用开发的Python库
后端·面试·github
柚几哥哥3 小时前
IntelliJ IDEA全栈Git指南:从零构建到高效协作开发
java·git·intellij-idea
小华同学ai3 小时前
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
后端·程序员·github
遇到困难睡大觉哈哈3 小时前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
ON.LIN4 小时前
Git提交本地项目到Github
git·github