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

在包管理之前咱們在項目中引用第三方包一般是去下載dll放到項目中再引用,後來逐漸發展成各類包管理工具,nuget就是一種工具,適用於任何現代開發平臺的基本工具可充當一種機制,經過這種機制,開發人員能夠建立、共享和使用有用的代碼。 一般,此類代碼捆綁到「包」中,其中包含編譯的代碼(如 DLL)以及在使用這些包的項目中所需的其餘內容。
Linux 咱們可使用apt、yum來安裝軟件,js 可使用npm來搭建下載,Java 有maven管理包,而對於.net nuget就是一樣效果和機制的工具。html

NuGet 客戶端工具

要使用 NuGet,做爲軟件包使用者或建立者,可使用命令行接口 (CLI) 工具以及 Visual Studio 中的 NuGet 功能。npm

CLI工具可使用 dotnet CLI 或 nuget.exe CLI。json

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 之前的版本。api

至於他們有什麼區別呢?網絡

第一個是之前.NET Framework時期使用包管理的方式是使用單獨的 packages.config 文件進行管理。maven

可是不建議使用packages.config,.NET Framework能夠在VS中右鍵點擊packages.config遷移到PackageReference。工具

如今.net 5的項目默認使用 PackageReference,包保留在 global-packages 文件夾中(而不是解決方案中的 packages 文件夾中)。
PackageReference 僅列出那些直接安裝在項目中的 NuGet 包,不會顯示引用包所包含的低級依賴更加簡潔。visual-studio

好比咱們使用nuget安裝NPOI包,它的依賴以下:ui

在.net framework的packages.config文件中看到NPOI和它的依賴項.net

在.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密鑰,本身去看下官網好了。

相關文章
相關標籤/搜索