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