NuGet 應用指南

 一、前言

   在產品開發過程中,一點有很多類庫;這麼多類庫大家是如何管理的呢,TFS、SVN、Github……?在開發人員使用對應類庫是否存在類庫引用路徑不一致、版本不一致問題、依賴類庫版本不對應等一些列問題呢?

   那麼就要給大家推薦一個.Net程式開發首先的類庫管理神器——NuGet

二、NuGet介紹

   NuGet是適用於任何現代開發平台的基本工具可充當一種機制,通過這種機制,開發人員可以創建、共享和使用有用的程式碼。 通常,此類程式碼捆綁到「包」中,其中包含編譯的程式碼(如 DLL)以及在使用這些包的項目中所需的其他內容。

   1. NuGet 包是具有 .nupkg 擴展的單個 ZIP 文件,此擴展包含編譯程式碼 (Dll)、與該程式碼相關的其他文件以及描述性清單(包含包版本號等資訊)。 使用程式碼的開發人員共享創建包,並將其發布到公用或專用主機。 包使用者從適合的主機獲取這些包,將它們添加到項目,然後在其項目程式碼中調用包的功能。 隨後,NuGet 自身負責處理所有中間詳細資訊。

   2.  NuGet包的流動:

    創建者生成有用的 NuGet 包並將其發布到主機。 然後,使用者可以在可訪問的主機上搜索有用且兼容的包,下載包並將其包含在項目中。 在項目中安裝包後,包的 API 將可用於其餘項目程式碼。(如下圖)

   3. 包定向兼容性

    「兼容」包指:此包所包含的程式集應至少針對與使用項目的目標框架兼容的一個目標 .NET Framework 而生成。 與 UWP 控制項一樣,開發人員可以創建特定於一個框架的程式包,也可以支援更廣泛的目標。 為了最大限度地利用程式包的兼容性,開發人員的目標是所有 .NET 和 .NET Core 項目都可以使用的 .NET Standard。 對於創建者和使用者而言,這是最有效的方式,因為單個包(通常包含單個程式集)適用於所有使用項目。 

   4. 管理依賴項

    在其他人的工作基礎上輕鬆生成,這是使程式包管理系統成為最強大功能的方法之一。 相應地,大部分 NuGet 的用途就是代表項目管理該依賴關係樹或「關係圖」。 簡單來說,你僅需要關注在項目中直接使用的包。 如果任何這些包本身使用其他包(這些包仍可以使用其他包),NuGet 將負責所有這些下層依賴項。

    

  5. 跟蹤引用和還原包

    NuGet 維護一個項目所依賴的包的簡單引用列表,包括頂層和下層的依賴關係。 也就是說,每當你將某個主機中的包安裝到項目中時,NuGet 都將在此引用列表中記錄包標識符和版本號。 然後,NuGet 根據請求提供還原所有引用程式包的方法。

    

 

以兩種「包管理格式」 中的一種維護,因為將它們稱為:

    • PackageReference(或「項目文件中的包引用」) | (NuGet 4.0+) 維護直接位於項目文件中的項目頂層依賴項的列表,因此無需單獨文件。 關聯文件 obj/project.assets.json 動態生成,以管理項目使用的包的總依賴項關係圖以及所有下層依賴項。PackageReference 始終由 .NET Core 項目使用。

    • packages.config:(NuGet 1.0+) 一種 XML 文件,用於維護項目中所有依賴項的簡單列表,包括其他已安裝包的依賴項 。 已安裝或已還原的包存儲在 packages 文件夾中。

二、使用NuGet

   1. 程式包源設置 

    程式包源可以設置遠程伺服器地址、本地路徑、本地伺服器地址等多種方式,本地包源後面會講到 

     

  2. 使用NuGet報管理工具介面使用非常簡單,如下圖

  

   3. 使用程式包管理器控制台

    Vs菜單->工具->NuGet包管理器->程式包管理器控制台

    如下圖添加:添加版本為12.0.3的Newtonsoft.Json.dll
    命令可以在NuGet官網中查看

    

三、發布程式到NuGet官網

   如果我們實現了一個很好的程式集,又想分享給大家一起使用。你就可以把你的程式集打包發布到NuGet官網。其他人想使用的時候就可以按照前面的步驟使用了。接下來我們一起來發布一個dll到NuGet官網吧。

  1.  前往NuGet官網註冊一個帳號(可以使用微軟帳號登錄),登錄後進入個人中心創建Api Key(相關步驟就不描述了,非常簡單)【請妥善保證Api Key】 

  2.  發布程式集未NuGet包的方式有很多種:nuget CLI, dotnet CLI, Visual Studio 

   本次我採用的是dotnet CLI方式:

·  a)生成NuGet 包(*.nupkg文件)

    進入程式集項目目錄,執行命令:dotnet pack    

    如果期望在執行 dotnet build 命令時自動執行 dotnet pack 命令,則需要在項目文件的 <PropertyGroup> 標籤中添加下行,

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

   b)發布NuGet包到官網: 

    命令行進入NuGet包文件目錄,執行命令

    命令:dotnet nuget push your_nuget_package.nupkg -k your_API_Key -s //api.nuget.org/v3/index.json (顏色標記內容分別替換為你的包名稱和Api Key)

 

  

 

 

   注意:注意包命名,如命名重複會推送失敗。

  當包發布成功後,會收到一封郵件。這時候就可以在NuGet包管理器中查看對於內容。如下圖:

  

  

四、本地NuGet伺服器搭建

  前面介紹了NuGet的使用和NuGet包的發布,但日常工作中很多程式集都是不需要對外公開的;那麼我有什麼辦法解決呢?——在本地搭建一個NuGet伺服器

  搭建NuGet本地伺服器非常簡單。

  1. 創建一個Web項目: 文件–>新建項目–>Web應用程式 (空項目)

    

  2.  使用NuGet包管理工具添加包:

    

 

 

     包添加成功後運行項目:看到如下介面,表示成功

    

 

 

      接下來就是把該項目部署到IIS上(詳細過程不在介紹)

   3. 使用本地NuGet服務:

      選擇「工具」菜單,選擇「選項」,彈出「選項」介面,選擇 「NuGet Package Manager」 ,然後在選擇 「程式包源」,點擊 「+」,在介面下方 設置 名稱 「mynuget.org」 隨便取,設置 源 「//IIS發布地址/nuget」 ,確定 關閉介面,回到項目。如下圖

    

 

 

 

   4. 使用本地伺服器

    發布包:

     

      使用方式同上面介紹    

五、工具

   前面使用發布包都是通過命令方式,那麼有沒有圖形化的介面呢?——有,肯定有。

  NuGet Package Explorer

  下載地址:    

CodePlex://npe.codeplex.com/

GitHub://github.com/NuGetPackageExplorer

1、安裝後啟動程式

  

 

 

   

如圖分為兩個編輯區,一個是 Package Metadata 負責描述程式包資訊的,Package Contents 負責程式包文件相關的。

點擊   Package Metadata 區 「編輯」 按鈕,想編輯 「Chaney.CalcTools」  程式包描述資訊。

然後 將「Chaney.CalcTools」 項目 產生Dll,拖入 Package Contents   

2. 點擊File->Publish->設置發布地址和Key點擊發布後就發布到NuGet服務端,後面就可以在NuGet包管理中使用發布程式。

 

 

 

 

引用:

  官方地址://docs.microsoft.com/zh-cn/nuget/what-is-nuget

 

Tags: