如何將項目打包上傳到NuGet伺服器(圖文教程)?

来源:https://www.cnblogs.com/kimiliucn/archive/2023/09/03/17675287.html
-Advertisement-
Play Games

在我寫[在.NET Framework中使用RocketMQ(阿裡雲版)]這篇博客的時候,因為封裝了很多代碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在博客中體現出來導致博客大量代碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝調用,我也覺得很不錯,於是就有了這篇文章... ...


cover.png

作者:西瓜程式猿
主頁傳送門:https://www.cnblogs.com/kimiliucn


前言

在我寫[在.NET Framework中使用RocketMQ(阿裡雲版)]這篇博客的時候,因為封裝了很多代碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在博客中體現出來導致博客大量代碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝引入調用,我也覺得很不錯,於是就有了這篇文章啦!
image.png

那NuGet是什麼呢?NuGet是.NET的包管理器,NuGet客戶端工具提供了生成和使用包的能力,NuGet庫是所有包作者和消費者使用的中心包存儲庫。那來看一下如何將代碼打包上傳到NuGet伺服器吧!


一、提前準備

1.1-登錄NuGet官網

(1)打開官方網址,然後點擊【Sign in with Microsoft】使用微軟賬號登錄。

登錄網址:https://www.nuget.org/users/account/LogOn

image.png
(2)輸入微軟郵箱,然後點擊【下一步】進行登錄。
image.png


1.2-創建API Key秘鑰

(1)點擊右上角用戶名稱,然後點擊【API Keys】。
image.png
(2)然後點擊【Create】,在輸入必填的信息。【KeyName】可以填項目包名,也可以自定義命名,唯一就行了。然後【Glob Pattern】可以填寫"*"來替換任何序列。
image.png
API密鑰是一種令牌,可以向NuGet Gallery識別身份。NuGet命令行實用程式允許使用API密鑰向庫提交NuGet包以進行身份驗證。
註意要對API密鑰保密!如果某個密鑰意外泄露,可以隨時生成一個新密鑰。如有必要,還可以刪除現有的API密鑰。

註意:要將包推送到nuget.org,必須使用nuget.exe v4.1.0或更高版本,它實現了所需的nuget協議。

(3)然後點擊【Copy】複製秘鑰,請自行將秘鑰保存好,後面會用到。
image.png


二、創建與打包項目

(1) [西瓜程式猿]創建一個名為【Kimi.RocketMQ.NET】類庫,目標框架使用【.NET Framework 4.8】,輸出類型為【類庫】。
image.png
(2)代碼編寫後,然後使用Release模式生成dll。(我這沒有依賴其他任何外部包,如果依賴了,上傳打包前需要進行配置)
image.png
image.png
(3) 打開【AssemblyInfo.cs】文件,設置相關屬性值和版本。
image.png
(4)為了方便管理文件,我們可以單獨新建一個文件夾保存要上傳的文件。[西瓜程式猿]這裡新建名為【Kimi.RocketMQ.NET】的文件夾。
將編譯好的DLL,放在此文件夾。
image.png
然後新建一個【readme.md】用來介紹文件,會在包管理中顯示此文件的內容
image.png
在設計一個ICON(圖標需要上傳到線上,然後將外網能訪問的圖片地址進行上傳到NuGet),作為nuget包的圖標。大小建議是128px或256px(註意:文件格式必須是.png)。
image.png
文件夾截圖:
image.png


三、上傳NuGet

[西瓜程式猿]準備了要上傳NuGet上傳使用的資源包,如果大家要下載最新版請去官網下載。可以訪問下載(如果失效了,請聯繫我)。

下載地址(編碼:0m7AToKX):https://yongteng.lanzoub.com/ip4nN17bdtbi
密碼: 5jh4

文件截圖:
image.png


3.1-使用可視化方式【推薦】

3.1.1-下載工具

(1)首頁將下載好資源包裡面的【PackageExplorer.4.4.72】文件夾,複製到一個固定的地方,不要刪除了。[西瓜程式猿]放在【D:\RuanjianAnzhuang\PackageExplorer.4.4.72】路徑下了,我們打開【NuGetPackageExplorer.exe】應用程式。
image.png
如果需要在官網下載最新版,可以點擊這個鏈接:

官方下載:https://www.microsoft.com/zh-cn/p/nuget-package-explorer/9wzdncrdmdm3?activetab=pivot:overviewtab

(2)然後點擊【Create a new package (CtrI+N)】創建一個新Package。
image.png


3.1.2-配置相關包

(1)新增【lib】文件夾。
image.png
image.png
(2)然後新選擇響應的框架版本,會自動創建版本文件夾,比如[西瓜程式猿]創建的【Kimi.RocketMQ.NET】包是給.NET Framework使用的,我這邊就先創建這些。
image.png
image.png
也可以自己創建文件夾,比如沒有4.8版本,那可以自行創建一個為【net48】文件夾。
image.png
image.png
(3)然後再每個文件夾中,添加之前打包後的DLL包。
image.png
添加好文件後,目錄是這樣的:
image.png
(3)然後編輯上傳數據,選擇【Edit】——>【Edit Metadata】,然後填寫相關信息。
image.png
image.png
(4)然後如果有依賴性,還需添加項目依賴,依賴哪些框架比如.NETFramework,.NETStandard等。
image.png
(5)然後編輯完成,看一下效果。
image.png
(5)點擊這個可以看到配置的源代碼。
image.png
代碼:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>Kimi.RocketMQ.NET</id>
    <version>1.0.9</version>
    <title>Kimi.RocketMQ.NET</title>
    <authors>西瓜程式猿</authors>
    <owners>西瓜程式猿</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
    <projectUrl>https://www.cnblogs.com/kimiliucn/p/17662052.html</projectUrl>
    <iconUrl>http://xxx.xxx.xxx.192:7980/Temp_Storage/Images/2023-08-31/9dd8dbcccd314a31835c69ea344b0216.png</iconUrl>
    <description>.NET Framework使用RocketMQ(阿裡雲版)</description>
    <summary>.NET Framework使用RocketMQ(阿裡雲版)</summary>
    <releaseNotes>發佈1.0.9</releaseNotes>
    <copyright>Copyright © 2023 西瓜程式猿</copyright>
    <language>zh-CN</language>
    <tags>Kimi.RocketMQ.NET</tags>
    <dependencies>
      <group targetFramework=".NETFramework4.8" />
    </dependencies>
  </metadata>
</package>

(6)點擊【File】——>【Save As】保存nupkg文件。
image.png
文件截圖:
image.png


3.3-上傳到nuget伺服器

(1)點擊【File】——>【Publish】。
image.png
(2)【Publish key or PAT】填寫秘鑰Key,然後點擊【Publish】發佈,只要沒報錯就表示上傳成功了。
image.png
(3)稍等1-3分鐘,然後會收到上傳成功的郵件通知。
image.png
(4)然後可以去官網看看是否此版本發佈成功了。

[西瓜程式猿]案例:https://www.nuget.org/packages/Kimi.RocketMQ.NET/

image.png


3.2-使用命令方式

3.2.1-下載軟體配置環境

(1)點擊下麵地址下載軟體,選擇比較新的版本即可(如果是通過上面的鏈接下載了資源包,就可以跳過這一步了,直接看第二步驟)。

官網下載:https://www.nuget.org/downloads

image.png
下載好後得到:
image.png
(2)把下載好的【nuget.exe】這個文件,放在一個固定的地方,不要刪了。[西瓜程式猿]放在這個目錄【D:\RuanjianAnzhuang\nuget_client】。
image.png
(3)然後來配置環境變數。點擊【此電腦】,右擊【屬性】——>高級系統設置——>環境變數——>系統變數——>選擇Path——>編輯——>新建——>填寫【D:\RuanjianAnzhuang\nuget_client】,大家根據自己路徑配置哈。
image.png
(4)測試是否配置成功。按【win+R】鍵,然後輸入cmd,在輸入【nuget】命令查看。

命令:nuget

配置成功截圖:
image.png
配置失敗截圖:
image.png


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


3.2.4-生成nuspec文件

使用【nuget spec】命令生產.nuspec 文件,文件xml格式的。

命令:nuget spec

成功截圖:
image.png


3.2.5-生成nupkg文件

使用【nuget pack】命令生成.nupkg文件。

命令:nuget pack

成功截圖:
image.png


3.2.6-上傳到nuget伺服器

輸入以下命令,可以將.nupkg包上傳發佈到NuGet伺服器上(將my_api_key參數替換成自己生成的APIKey)。

命令:nuget push Kimi.RocketMQ.NET.1.0.0.nupkg my_api_key -Source https://api.nuget.org/v3/index.json

上傳成功後的郵件:
image.png
上傳成功後,需要等待10幾分鐘。官方需要先審核,審核通過後還需要進行重新索引,然後還需要同步。等待10多分鐘後,就可以搜索到上傳的包了。
image.png


四、NuGet包的管理

4.1-刪除NuGet包

NuGet包無法刪除,但是隱藏對應的版本。
image.png
選擇要隱藏的版本後,然後取消勾選【List in search results】,然後點擊【Save】保存即可。
image.png
效果(隱藏後就搜索不到1.0.0的版本了):image.png


五、防踩坑指南

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
解決方案:錯誤提示說"此程式包尚未編製索引。它將出現在搜索結果中,並可在索引完成後進行安裝/還原"。所以需要等10分鐘左右就行了,等程式包編製好索引就可以在NuGet客戶端搜索到了。


5.3-在以下主源中找不到包“Kimi.RocketMQ.NET 1.0.5”

詳細錯誤:

在以下主源中找不到包“Kimi.RocketMQ.NET 1.0.5”:“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
解決方案:說明這個【1.0.9】的版本已經存在了,修改版本號重新發佈即可。



原文鏈接:https://www.cnblogs.com/kimiliucn/p/17675287.html

版權聲明:本文為原創文章,版權歸 [西瓜程式猿] 所有,轉載請註明出處,有任何疑問請私信咨詢。
原文鏈接:https://www.cnblogs.com/kimiliucn/p/17675287.html

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 集合是一種無序、可變的數據結構,它也是一種變數類型,集合用於存儲唯一的元素。集合中的元素不能重覆,並且沒有固定的順序。在Python 提供了內置的 `set` 類型來表示集合,所以關鍵字`set`就是集合的意思。 你可以使用大括弧 `{}` 或者 `set()` 函數來創建一個集合。 ```pyth ...
  • `Matplotlib`的**坐標軸**是用於在繪圖中表示數據的位置的工具。 坐標軸是圖像中的水平和垂直線,它們通常表示為 x 軸和 y 軸。坐標軸的作用是幫助觀察者瞭解圖像中數據的位置和大小,通常標有數字或標簽,以指示特定的值在圖像中的位置。 # 1. 坐標軸範圍 `Matplotlib`繪製圖形 ...
  • 本文主要介紹 RocketMQ 的安裝部署,文中所使用到的軟體版本:RocketMQ 5.1.3、CentOS 7.9.2009。 1、RocketMQ 部署模型 1.1、部署模型說明 Apache RocketMQ 部署架構上主要分為四部分: A、生產者 Producer 發佈消息的角色。Prod ...
  • > 講解Go語言從編譯到執行全周期流程,每一部分都會包含豐富的技術細節和實際的代碼示例,幫助大家理解。 > 關註微信公眾號【TechLeadCloud】,分享互聯網架構、雲服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿 ...
  • 最近在公司的項目中,編寫了幾個自定義的 Exception 類。提交 PR 的時候,sonarqube 提示這幾個自定義異常不符合 ISerializable patten. 花了點時間稍微研究了一下,把這個問題解了。今天在此記錄一下,可能大家都會幫助到大家。 ## 自定義異常 編寫一個自定義的異常 ...
  • 我們在使用一些需要購買版權的軟體產品時,或者我們做的商業軟體需要進行售賣,為了收取費用,一般需要一個軟體使用許可證,然後輸入這個許可到軟體里就能夠使用軟體。簡單的是一串序列碼或者一個許可證文件,複雜的是一個定製化插件包。於是有的小伙伴就開始好奇這個許可是怎麼實現的,特別是在離線情況下它是怎麼給軟體授... ...
  • # EF Core併發控制 # 併發控制概念 1. 併發控制:避免多個用戶同時操作資源造成的併發衝突問題。 2. 最好的解決方案:非資料庫解決方案 3. 資料庫層面的兩種策略:悲觀、樂觀 # 悲觀鎖 悲觀併發控制一般採用行鎖 ,表鎖等排他鎖對資源進行鎖定,確保同時只有一個使用者操作被鎖定的資源。 E ...
  • # Unity UGUI的Scrollbar(滾動條)組件的介紹及使用 ## 一、什麼是Scrollbar組件? Scrollbar組件是Unity中UGUI系統提供的一種UI組件,主要用於在UI界面中提供滾動條功能,使用戶可以通過滾動條來查看超出屏幕範圍的內容。 ## 二、Scrollbar組件是 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...