1、前言git
在產品開發過程當中,一點有不少類庫;這麼多類庫你們是如何管理的呢,TFS、SVN、Github……?在開發人員使用對應類庫是否存在類庫引用路徑不一致、版本不一致問題、依賴類庫版本不對應等一些列問題呢?github
那麼就要給你們推薦一個.Net程序開發首先的類庫管理神器——NuGetjson
2、NuGet介紹api
NuGet是適用於任何現代開發平臺的基本工具可充當一種機制,經過這種機制,開發人員能夠建立、共享和使用有用的代碼。 一般,此類代碼捆綁到「包」中,其中包含編譯的代碼(如 DLL)以及在使用這些包的項目中所需的其餘內容。bash
1. NuGet 包是具備 .nupkg
擴展的單個 ZIP 文件,此擴展包含編譯代碼 (Dll)、與該代碼相關的其餘文件以及描述性清單(包含包版本號等信息)。 使用代碼的開發人員共享建立包,並將其發佈到公用或專用主機。 包使用者從適合的主機獲取這些包,將它們添加到項目,而後在其項目代碼中調用包的功能。 隨後,NuGet 自身負責處理全部中間詳細信息。服務器
2. NuGet包的流動:框架
建立者生成有用的 NuGet 包並將其發佈到主機。 而後,使用者能夠在可訪問的主機上搜索有用且兼容的包,下載包並將其包含在項目中。 在項目中安裝包後,包的 API 將可用於其他項目代碼。(以下圖)工具
3. 包定向兼容性ui
「兼容」包指:此包所包含的程序集應至少針對與使用項目的目標框架兼容的一個目標 .NET Framework 而生成。 與 UWP 控件同樣,開發人員能夠建立特定於一個框架的程序包,也能夠支持更普遍的目標。 爲了最大限度地利用程序包的兼容性,開發人員的目標是全部 .NET 和 .NET Core 項目均可以使用的 .NET Standard。 對於建立者和使用者而言,這是最有效的方式,由於單個包(一般包含單個程序集)適用於全部使用項目。 spa
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
文件夾中。
2、使用NuGet
1. 程序包源設置
程序包源能夠設置遠程服務器地址、本地路徑、本地服務器地址等多種方式,本地包源後面會講到
2. 使用NuGet報管理工具界面使用很是簡單,以下圖
3. 使用程序包管理器控制檯
Vs菜單->工具->NuGet包管理器->程序包管理器控制檯
以下圖添加:添加版本爲12.0.3的Newtonsoft.Json.dll
命令能夠在NuGet官網中查看
3、發佈程序到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 https://api.nuget.org/v3/index.json (顏色標記內容
分別替換爲你的包名稱和Api Key)
注意:注意包命名,如命名重複會推送失敗。
當包發佈成功後,會收到一封郵件。這時候就能夠在NuGet包管理器中查看對於內容。以下圖:
4、本地NuGet服務器搭建
前面介紹了NuGet的使用和NuGet包的發佈,但平常工做中不少程序集都是不須要對外公開的;那麼我有什麼辦法解決呢?——在本地搭建一個NuGet服務器
搭建NuGet本地服務器很是簡單。
1. 建立一個Web項目: 文件-->新建項目-->Web應用程序 (空項目)
2. 使用NuGet包管理工具添加包:
包添加成功後運行項目:看到以下界面,表示成功
接下來就是把該項目部署到IIS上(詳細過程不在介紹)
3. 使用本地NuGet服務:
選擇「工具」菜單,選擇「選項」,彈出「選項」界面,選擇 「NuGet Package Manager」 ,而後在選擇 「程序包源」,點擊 「+」,在界面下方 設置 名稱 「mynuget.org」 隨便取,設置 源 「http://IIS發佈地址/nuget」 ,肯定 關閉界面,回到項目。以下圖
4. 使用本地服務器
發佈包:
使用方式同上面介紹
5、工具
前面使用發佈包都是經過命令方式,那麼有沒有圖形化的界面呢?——有,確定有。
NuGet Package Explorer
下載地址:
CodePlex:https://npe.codeplex.com/
GitHub:https://github.com/NuGetPackageExplorer
一、安裝後啓動程序
如圖分爲兩個編輯區,一個是 Package Metadata 負責描述程序包信息的,Package Contents 負責程序包文件相關的。
點擊 Package Metadata 區 「編輯」 按鈕,想編輯 「Chaney.CalcTools」 程序包描述信息。
而後 將「Chaney.CalcTools」 項目 產生Dll,拖入 Package Contents
2. 點擊File->Publish->設置發佈地址和Key點擊發布後就發佈到NuGet服務端,後面就能夠在NuGet包管理中使用發佈程序。
引用:
官方地址:https://docs.microsoft.com/zh-cn/nuget/what-is-nuget