.net 知新:【4】NuGet简介和使用
在包管理以前我们在项目中引用第三方包通常是去下载dll放到项目中再引用,后来逐渐发展成各种包管理工具,nuget就是一种工具,适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建、共享和使用有用的代码。 通常,此类代码捆绑到“包”中,其中包含编译的代码(如 DLL)以及在使用这些包的项目中所需的其他内容。
Linux 我们可以使用apt、yum来安装软件,js 可以使用npm来搭建下载,Java 有maven管理包,而对于.net nuget就是同样效果和机制的工具。
NuGet 客户端工具
要使用 NuGet,作为软件包使用者或创建者,可以使用命令行接口 (CLI) 工具以及 Visual Studio 中的 NuGet 功能。
CLI工具可以使用 dotnet CLI 或 nuget.exe CLI。
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 以前的版本。
至于他们有什么区别呢?
第一个是以前.NET Framework时期使用包管理的方式是使用单独的 packages.config 文件进行管理。

但是不建议使用packages.config,.NET Framework可以在VS中右键点击packages.config迁移到PackageReference。

现在.net 5的项目默认使用 PackageReference,包保留在 global-packages 文件夹中(而不是解决方案中的 packages 文件夹中)。
PackageReference 仅列出那些直接安装在项目中的 NuGet 包,不会显示引用包所包含的低级依赖更加简洁。
比如我们使用nuget安装NPOI包,它的依赖如下:

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

在.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密钥,自己去看下官网好了。

.net 知新:【4】NuGet简介和使用的更多相关文章
- .net 知新:【3】.net 5 项目结构说明和发布部署
.net 5的项目目录结构和.net framework有些明显的变化,包括显示结构和项目文件,从这两个方面看看有哪些变化. 项目目录结构 就以上篇用的demo项目为例([.net 知新:[2] .N ...
- [转帖]知新之--12-factors
知新之--12-factors https://blog.csdn.net/weixin_34233421/article/details/85819756 12-factors I. 基准代码 一份 ...
- Nuget-Doc:Nuget 简介
ylbtech-Nuget-Doc:Nuget 简介 1.返回顶部 1. NuGet 简介 2019/05/24 适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建.共享和 ...
- NET core 添加了新的nuget包,部署出现Could not load file or assembly
这个坑,今天整了一天,我添加了Microsoft.AspNetCore.Mvc.Versioning包,结果发布到服务器,我复制了dll过去出现了一直找不到加载不成功的问题 Startup.Confi ...
- 转 苹果的新编程语言 Swift 简介
苹果官方文档地址 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Pro ...
- 优秀个人免费私有云OwnCloud 8.0终于发布 - 亮眼新功能初探简介
OwnCloud是一个基于Linux的私有云开源项目,用户可以免费使用它来搭建自己的私有云来进行文件和多媒体等的分享. 本人有幸在大概一年多前因为项目需要而接触和使用到OwnCloud,但不幸的是当时 ...
- before(),after(),prepend(),append()等新DOM方法简介
一.DOM API也在不断升级 web前端标准一直在不断升级,比方说,说了很多年的HTML5.CSS3,以及天天见的ES6. 然后,似乎就没有然后了.实际上,除了HTML5/CSS3/ES6+,关于D ...
- 如何最快速地将旧的 NuGet 包 (2.x, packages.config) 升级成新的 NuGet 包 (4.x, PackageReference)
最近我将项目格式进行了升级,从旧的 csproj 升级成了新的 csproj:NuGet 包管理的方式也从 packages.config 升级成了 PackageReference.然而迁移完才发现 ...
- MySQL必知必会:简介undo log、truncate、以及undo log如何帮你回滚事物
目录 一.前言 二.undo log表空间 三.关于undo log默认的配置 四.如何将undo log放到单独的表空间 文章公众号首发,持续更新中 五.rollback segment 六.什么是 ...
随机推荐
- 使用Vue-Cli搭建Ant Design Vue前端开发环境
如果文章有帮助到你,还请点个赞或留下评论 搭建脚手架 环境准备 nodeJS vue-cli 如果没有安装点击此处查看安装方法 进入 vue ui 1.打开终端,输入命令 vue ui 2.选择项目存 ...
- 超详细的原生JavaScript轮播图(幻灯片)的制作
本次轮播图的制作主要分为3个部分,分别是:设置定时器自动轮播:点击左右切换按钮轮播:下方点击按钮轮播.具体实现步骤如下: (效果图) html部分代码如下: <div class="s ...
- Java:Java的重写与重载区分
最明显的区别为:重写只存在于子类与父类中,重载存在于一个类中. 具体区别如下: 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重 ...
- SpringBoot:SpringBoot项目中 HttpServletRequest ServletInputStream 读取不到文件数据流
在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器.在HiddenHttpMethodFilt ...
- kafka 安装和配置
转载自:https://www.cnblogs.com/heijinli/p/13545182.html 下载及安装 第一步:进入kafka官网 按照自己的需求选择版本,我这里选择 最新版的 2. ...
- 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?
报错主要部分如下: Error building SqlSession.### Cause: org.apache.ibatis.builder.BuilderException: Error cre ...
- Java8 Map中新增的方法使用总结
前言 得益于 Java 8 的 default 方法特性,Java 8 对 Map 增加了不少实用的默认方法,像 getOrDefault, forEach, replace, replaceAll, ...
- buu crackRTF
一.无壳,拖入ida,静态编译一下 整体逻辑还是很清晰,这里我的盲区是那个加密函数,是md5,没看出来,内存地址看错了,之前用黑盒动调一下,发现猜不出来,看某位wp发现有的老哥,直接sha1爆破的,狠 ...
- NPOI库读写Excel文件
//首先Nuget安装NPOI库using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using N ...
- P5816 [CQOI2010]内部白点 题解
[题目链接] [解析] 好题. 拿到题目首先先看一下它的无解情况是怎么判断的. 然后很明显这个是不存在无解情况的. 因为它的黑点开始都是给定了的,可以理解为一个边界. 而新的变化的黑点不会往外扩张,那 ...