一、前言

  在产品开发过程中,一点有很多类库;这么多类库大家是如何管理的呢,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 https://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” 随便取,设置 源 “http://IIS发布地址/nuget” ,确定 关闭界面,回到项目。如下图

    

   4. 使用本地服务器

    发布包:

    

     使用方式同上面介绍    

五、工具

  前面使用发布包都是通过命令方式,那么有没有图形化的界面呢?——有,肯定有。

  NuGet Package Explorer

  下载地址:    

CodePlex:https://npe.codeplex.com/

GitHub:https://github.com/NuGetPackageExplorer

1、安装后启动程序

  

  

如图分为两个编辑区,一个是 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

NuGet 应用指南的更多相关文章

  1. 通过ProGet搭建一个内部的Nuget服务器

    .NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...

  2. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  3. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

  4. 在 Windows 上安装Rabbit MQ 指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  5. 001.Getting Started -- 【入门指南】

    Getting Started 入门指南 662 of 756 people found this helpful Meng.Net 自译 1. Install .NET Core 到官网安装 .NE ...

  6. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  7. DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等

    DotNet 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器. ...

  8. (转)在 Windows 上安装Rabbit MQ 指南

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...

  9. Web API入门指南(安全)转

    安全检测的工具站点:https://www.owasp.org/index.php/Category:Vulnerability_Scanning_Tools Web API入门指南有些朋友回复问了些 ...

随机推荐

  1. 终于我用JOL打破了你对java对象的所有想象

    目录 简介 JOL简介 使用JOL分析VM信息 使用JOL分析String 使用JOL分析数组 使用JOL分析自动装箱 使用JOL分析引用关系 总结 简介 使用面向对象的编程语言的好处就是,虽然没有女 ...

  2. 第二个hibernate Annotation版本的helloworld

    经过第一次的 hibernate  我发现每一个数据库表都对应了一个类,并且每一个类都要新建一个文件进行配置 很麻烦!  于是便出现了Annotation版本的hibernate. 具体如下: 1.同 ...

  3. kworkerds挖矿木马

    昨天一朋友的公司服务器中了挖矿病毒,一起帮忙查看并做下记录.   病毒信息 名称:kworkerds 目录:/tmp/ 关键点:文件 -i 属性   i :这个i可就很厉害了.它可以让一个文件“不能被 ...

  4. 我们是如何做DevOps的?

    一.DevOps的理解 DevOps的概念理解 DevOps 的概念在软件开发行业中逐渐流行起来.越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能.有了 DevOps ,团队可以定期 ...

  5. Python内置Turtle绘图库方法简介+多案例

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  6. Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架

    根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...

  7. [html][js]视频倍速播放功能

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  8. Chrome扩展移植到Edge浏览器教程

    微软在推出Edge浏览器之初,就把能够使用扩展(extension)作为一个重要功能.在Win10一周年更新版(1607)中,这项功能正式向广大用户推出(当然,Insider用户早就测试了一段时间了) ...

  9. 关键时刻,让你的iphone拒绝掉的所有来电

    夜间被骚扰电话吵醒是会非常烦躁的,以下就是iphone的勿扰模式,配合刚出的夜间深夜模式非常的nice. 可以自定义设置时间段,每天智能切换. 也可以开启个人收藏的白名单,让家人有紧急事情也可以联系到 ...

  10. Python爬虫小白入门(七)爬取豆瓣音乐top250

      抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...