在包管理以前我們在專案中引用第三方包通常是去下載dll放到專案中再引用,後來逐漸發展成各種包管理工具,nuget就是一種工具,適用於任何現代開發平臺的基本工具可充當一種機制,通過這種機制,開發人員可以建立、共享和使用有用的程式碼。 通常,此類程式碼捆綁到“包”中,其中包含編譯的程式碼(如 DLL)以及在使用這些包的專案中所需的其他內容。
Linux 我們可以使用apt、yum來安裝軟體,js 可以使用npm來搭建下載,Java 有maven管理包,而對於.net nuget就是同樣效果和機制的工具。
NuGet 客戶端工具
要使用 NuGet,作為軟體包使用者或建立者,可以使用命令列介面 (CLI) 工具以及 Visual Studio 中的 NuGet 功能。
CLI工具可以使用 dotnet CLI 或 nuget.exe CLI。
dotnet CLI 隨某些 Visual Studio 工作負載一起安裝,例如 .NET Core 。從 Visual Studio 2017 開始dotnet CLI 將自動隨任何與 .NET Core 相關的工作負載一起安裝。
dotnet CLI 適用於 .NET Core 和 .NET Standard 專案(SDK 樣式的專案型別),以及任何其他 SDK 樣式專案(例如,面向 .NET Framework 的 SDK 樣式專案)
也就是說安裝VS的時候會自動包含在工作負載中,對於.net 5 也可以直接安裝.NET SDK,如之前.net 知新:【1】 .Net 5 基本概念文章介紹中可以看到.NET SDK是包含了CLI的。
而對於.NET Framework(僅限非 SDK 樣式專案),使用 nuget.exe CLI。這種方式現在基本不使用,因為我們一般不會去單獨安裝,都是安裝VS後直接使用就行了,除非你還在使用Visual Studio 2017 以前的版本。
至於他們有什麼區別呢?
第一個是以前.NET Framework時期使用包管理的方式是使用單獨的 packages.config 檔案進行管理。
但是不建議使用packages.config,.NET Framework可以在VS中右鍵點選packages.config遷移到PackageReference。
現在.net 5的專案預設使用 PackageReference,包保留在 global-packages 資料夾中(而不是解決方案中的 packages 資料夾中)。
PackageReference 僅列出那些直接安裝在專案中的 NuGet 包,不會顯示引用包所包含的低階依賴更加簡潔。
比如我們使用nuget安裝NPOI包,它的依賴如下:
在.net framework的packages.config檔案中看到NPOI和它的依賴項
在.net 5專案檔案中只有NPOI
第二個就是兩個工具的功能有差異
某些高階功能無法使用的時候我們就需要用命令的方式。
visual studio 使用 nuget
在VS裡面有兩種方式管理nuget包。第一種是右鍵專案->管理程式nuget包 進入導UI介面。
可以進行程式包的查詢和安裝的包管理,對包進行解除安裝更新。 在右上角有一個程式包源,可以進行包源設定,設定包源地址。預設是將 NuGet.org 用作 NuGet 客戶端的包儲存庫。
所以我們配置應使用以下 V3 API 終結點:
https://api.nuget.org/v3/index.json
NuGet.org 是 NuGet 包的公用主機,NuGet 技術還支援在雲中(如在 Azure DevOps 上)、在私有網路中或者甚至直接在本地檔案系統以私密方式託管包。
https://www.nuget.org/ 開啟NuGet.org站點可以進行包搜尋和包的上傳等。
另外一種方式就是工具->nuget管理器->程式包管理器控制檯 ,調出控制檯後就可以使用cli命令進行nuget包管理了。
所以有時候我們搜尋文章的時候看到別人新增包,命令dotnet add package Newtonsoft.Json
我們要知道這是nuget包新增,程式包管理器控制檯執行,或者在ui介面搜尋包視覺化操作新增,以前的 nuget.exe CLI新增包是install 命令,要注意區分下。
建立釋出包
首先需要設定屬性,建立包需要以下屬性。
- PackageId,包識別符號,在託管包的庫中必須是唯一的。 如果未指定,預設值為 AssemblyName。
- Version,窗體 Major.Minor.Patch[-Suffix] 中特定的版本號,其中 -Suffix 標識預釋出版本。 如果未指定,預設值為 1.0.0。
- 包標題應出現在主機上(例如 nuget.org)
- Authors,作者和所有者資訊。 如果未指定,預設值為 AssemblyName。
- Company,公司名稱。 如果未指定,預設值為 AssemblyName。
在 Visual Studio 中,可以在專案屬性中設定這些值(在解決方案資源管理器中右鍵單擊專案,選擇“屬性” ,然後選擇“包” 選項卡)。 也可以直接在專案檔案 (.csproj) 中設定這些屬性。
在包的 NuGet.org 頁面上所示的包說明可以在 .csproj 檔案中的
.nuspec 檔案是包含包後設資料的 XML 清單,.nuspec 當你建立包時將生成。
執行 pack 命令
執行dotnet pack
命令會打包解決方案中可打包的所有專案,也可以在專案屬性上設定“在構建時生成NutGet包”。
具有 .nupkg 副檔名的 NuGet 包只是一個 zip 檔案。 若要輕鬆檢視任何包的內容,只需將副檔名更改為 .zip 並按常規方法展開內容。 嘗試將包上傳到主機前,請務必將副檔名改回 .nupkg。
命令執行完成後打包後生成的檔案路徑會顯示在控制檯上,到目錄檢視到ConsoleAppNet5.1.0.0.nupkg 包,並複製一個改成zip驗證。
釋出到 nuget.org
登入到nuget.org,使用 Microsoft 帳戶進行登入,然後選擇upload上傳,選擇了檔案後會進行自動校驗,如果有問題處理後再重新上傳。
還可以通過命令的方式去上傳,但是需要api金鑰,自己去看下官網好了。