.NET Core 系列5 :使用 Nuget打包类库
NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以及更新组件即可一键完成,大大提升工作效率,减少不必要的引用报错。从运维角度,可在不影响老版本的情况下发布新版本,可统一管理公司各个项目中组件版本不一和各个版本组件的使用情况,减少故障发生以并使得项目稳定运行。
以往做nuget包我们一般要么用命令行,要么用nuget的图形化界面去做,但是一些操作比较麻烦.比如引入命名空间,引入第三方nuget包。这些在.NET Core项目里却很简单,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门 做了简要介绍,下面我们来详细介绍下这个命令。
dotnet-pack
- 将代码打包成 NuGet 包
概要
dotnet pack [--output] [--no-build] [--build-base-path] [--configuration] [--version-suffix] [<project>]
描述
dotnet pack
命令生成项目并创建 NuGet 包。这个操作的结果是两个 nupkg
扩展名的包。一个包含代码,另一个包含调试符号。
该项目被依赖的 NuGet 包装被添加到 nuspec 文件,因此,他们能够在安装包时得到解决。
默认情况下,项目到项目之间的引用是不打包到项目中的。如果你想那样做,你需要在你的依赖中引用需要项目的 type
节点设置为 “build” ,设置就像下面的例子:
{"version": "1.0.0-*","dependencies": {"ProjectA": {"target": "project","type": "build"}}
}
默认情况下,dotnet pack
首先生成项目。如果你想避免这样,传递 --no-build
选项。这在持续集成(CI)构建场景,正如你知道代码仅仅是预生成的示例,会是有用的。
选项
[project]
打包的项目。它还可以是一个 project.json
文件的路径或者是目录。如果忽略,它将默认为当前目录。
-o
, --output
[DIR]
指定生成的目录。
--no-build
打包进程中跳过生成阶段。
--build-base-path
指定临时生成产物的目录。默认情况下,它们在当前目录的 obj 目录。
-c
, --configuration [Debug|Release]
当生成项目时使用的配置。如果没有指定,将默认为 “Debug”。
例子
dotnet pack
打包当前项目。
dotnet pack ~/projects/app1/project.json
打包 app1 项目。
dotnet pack --output nupkgs
打包当前的应用程序,并将生成的包放置到指定的文件夹中。
dotnet pack --no-build --output nupkgs
打包当前的项目到指定的文件夹中,并跳过生成步骤
回到我们在.NET Core系列 :3 、使用多个项目 创建的类库项目DotnetNewLib,切换到DotnetNewLib 目录下执行 dotnet pack命令:
[root@Mono DotnetNewLib]# dotnet pack
Project DotnetNewLib (.NETStandard,Version=v1.6) was previously compiled. Skipping compilation.
Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.symbols.nupkg
目录结构如下:
DotnetNewLib
|-- Library.cs
|-- project.json
|-- project.lock.json
+—bin
+—Debug
|-- DotnetNewLib.1.0.0.nupkg
|-- DotnetNewLib.1.0.0.symbols.nupkg
+-- netstandard1.6
|-- DotnetNewLib.deps.json
|-- DotnetNewLib.dll
+-- DotnetNewLib.pdb
上面的结构里我把obj目录拿掉了,我们看到在Debug目录下生成了2个文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg, 这些就是nuget 包,很简单吧,版本号信息来自于project.json文件:
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable"
},
"dependencies": {},
"frameworks": {
"netstandard1.6": {
"dependencies": {
"NETStandard.Library": "1.6.0"
}
}
}
}
但是我生成的是Debug,我们生成Release 版本:
dotnet pack -c Release
[root@Mono DotnetNewLib]# dotnet pack -c Release
Project DotnetNewLib (.NETStandard,Version=v1.6) will be compiled because expected outputs are missing
Compiling DotnetNewLib for .NETStandard,Version=v1.6
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.4976986
Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.symbols.nupkg
生成了Release目录
DotnetNewLib
|-- Library.cs
|-- project.json
|-- project.lock.json
+—bin
+—Debug
|-- DotnetNewLib.1.0.0.nupkg
|-- DotnetNewLib.1.0.0.symbols.nupkg
+-- netstandard1.6
|-- DotnetNewLib.deps.json
|-- DotnetNewLib.dll
+-- DotnetNewLib.pdb
+—Release
|-- DotnetNewLib.1.0.0.nupkg
|-- DotnetNewLib.1.0.0.symbols.nupkg
+-- netstandard1.6
|-- DotnetNewLib.deps.json
|-- DotnetNewLib.dll
+-- DotnetNewLib.pdb
在Release目录下 生成了2个文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg,第一个文件就是我们想要的nuget包。我们来看下Nuget 包里的具体内容,我们可以用
NuGet Package Explorer 工具打开DotnetNewLib.1.0.0.nupkg:
里面仅有一个 lib 文件 netstandard1.6 目标配置文件。这意味着,我们 NuGet 包只适用于.Net Core 应用程序 针对 NetStandard1.6 (和即将到来的 4.6.3),文章 拥抱.NET Core,如何开发一个跨平台类库 (1)
对Nuget包做了很好的说明了,推荐大家阅读, 园子里还有一篇《用命令行工具创建 NuGet 程序包》对Nuget 的详细内容做了讲解。
相关文章:
.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
.NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 :3 、使用多个项目
.NET Core系列 :4 测试
原文地址:http://www.cnblogs.com/shanyou/p/5814683.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
赞赏
人赞赏
.NET Core 系列5 :使用 Nuget打包类库相关推荐
- Nuget打包类库及引用
什么是nuget 适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建.共享和使用有用的代码. 通常,此类代码捆绑到"包"中,其中包含编译的代码(如 DL ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- .NET Core 从 Github到 Nuget 持续集成、部署
一.前言 Nuget 作为一个.NET研发人员,我想你都不会陌生,他为我们提供非常方便的程序包管理,不管是版本,还是包的依赖都能轻松应对,可以说是我们的好助手.而 Nuget 除了官方nuget.or ...
- .NET Core系列 :4 测试
2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...
- .NET Core系列 :3 、使用多个项目
通过前面的两篇文章.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 和.NET Core系列 : 2 .project.json 这葫芦里卖的什么药,我们已经知道如何创建 ...
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
一.返回类型 ASP.NET Core 提供以下 Web API Action方法返回类型选项,以及说明每种返回类型的最佳适用情况: (1) 固定类型 (2) IActionResult (3) Ac ...
- 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
原文:5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢 ...
- asp向不同的用户发送信息_【asp.net core 系列】 1 带你了解一下asp.net core
0. 前言 这是一个新的系列,名字是<http://ASP.NET Core 入门到实战>.这个系列主讲http://ASP.NET Core MVC,辅助一些前端的基础知识(能用来实现我 ...
最新文章
- python调用webservice接口实例_python发布webservice接口
- bzoj4383(拓扑排序)
- linux 文件系统 vfs,linux虚拟文件系统vfs
- IdentityServer4(OAuth2.0服务)折腾笔记
- 动态库(共享库)的制作和使用
- ECCV 2020 论文大盘点-实例分割篇
- 【Flink】Flink CDC 数据同步 【视频笔记】
- 征途linux mysql_Linux环境——MySQL安装及配置(5.7版本)
- [CLS]预训练语言模型的前世今生[SEP]萌芽时代[SEP]
- 第一阶段个人总结04
- 用FL Studio制作反向人声音效(Vocal Chops)
- mysql in 子查询 效率慢 优化(转)
- c语言对n个数选择排序_选择排序_C语言「抄作业」
- Please port CPUType detection to your platform (CPU_ABI string ‘loongarch64‘)
- 11.云计算平台(数据科学概论)
- BAT面试高级进阶,Java架构师之路
- spark+dataframe+小汽车摇号倍率与中签率分析
- 直接下载 * http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe
- html中微信添加好友超链接,微信给文字加链接代码分享(原来微信超链接是这样加的)...
- 安装win11电脑必须支持TPM2.0和必须支持安全启动的解决方法
热门文章
- 使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构
- .NET再出发!20岁生日快乐
- 如何在 Entity Framework 中计算 时间差 ?
- MediatR 在.NET应用中的实践
- .NET 6 中的 ConfigurationManager
- 我是如何保持长期写作的
- NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?
- Xamarin.Forms: 无限滚动的ListView(懒加载方式)
- 这个世界,正在悄悄惩罚那些不注意身体的人
- .NET Core 下使用 Kafka