如何把.net core 打包到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” ,设置就像下面的例子:
默认情况下,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命令:
上面的结构里把obj目录拿掉了,看到在Debug目录下生成了2个文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg, 这些就是nuget 包.
(2)版本号信息来自于project.json文件:
(3)但是生成的是Debug,生成Release 版本:
(4)生成了Release目录
在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)。