.net 知新:【4】NuGet簡介和使用

在包管理以前我們在項目中引用第三方包通常是去下載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 文件中的 $description 拉取。
.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密鑰,自己去看下官網好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章