如何使用 dotnet pack 打包 .NET 跨平台程序集?

2024-01-24 01:04

本文主要是介绍如何使用 dotnet pack 打包 .NET 跨平台程序集?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何使用 dotnet pack 打包 .NET 跨平台程序集?

  • dotnet pack 介绍
    • 官方描述
  • dotnet pack 命令说明
  • 使用示例
    • 打包 .net 类库项目
    • 生成带注释的 nuget 包
    • 构建特定平台的 nuget 包
      • 关于 .NET RID 目录

dotnet pack 介绍

dotnet pack 是一个 .NET Core NuGet 包打包程序。

官方描述

dotnet pack - 将代码打包到 NuGet 包。dotnet pack 命令生成项目并创建 NuGet 包。 该命令的结果是一个 NuGet 包,也就是一个 .nupkg 文件。

如果要生成包含调试符号的包,可以使用以下两个选项:

  • --include-symbols:该选项用于创建符号包。
  • --include-source:该选项用于创建带有 src 文件夹的符号包,该文件夹包含源文件。

将被打包项目的 NuGet 依赖项添加到 .nuspec 文件,以便在安装包时可以进行正确解析。 如果打包的项目具有对其他项目的引用,则不会将其他项目包含在包中。 目前,如果具有项目到项目的依赖项,则每个项目均必须包含一个包。

默认情况下,dotnet pack 先构建项目。 如果希望避免此行为,则传递 --no-build 选项。 此选项在持续集成 (CI) 生成方案中通常非常有用,你可以知道代码是之前生成的。

dotnet pack 命令说明

前提条件,安装 .NET Core 3.1 SDK 及更高版本,此处环境安装的是 .NET 8 SDK,在终端执行如下命令:

  • 查看 .net 信息:
PS F:\gitee> dotnet --info
.NET SDK:Version:           8.0.101Commit:            6eceda187bWorkload version:  8.0.100-manifests.291ed43a运行时环境:OS Name:     WindowsOS Version:  10.0.22621OS Platform: WindowsRID:         win-x64Base Path:   C:\Program Files\dotnet\sdk\8.0.101\已安装 .NET 工作负载:Workload version: 8.0.100-manifests.291ed43a
没有要显示的已安装工作负载。Host:Version:      8.0.1Architecture: x64Commit:       bf5e279d92.NET SDKs installed:8.0.101 [C:\Program Files\dotnet\sdk].NET runtimes installed:Microsoft.AspNetCore.App 8.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]Microsoft.NETCore.App 8.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]Microsoft.WindowsDesktop.App 8.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]Other architectures found:x86   [C:\Program Files (x86)\dotnet]registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]Environment variables:Not setglobal.json file:Not foundLearn more:https://aka.ms/dotnet/infoDownload .NET:https://aka.ms/dotnet/download
  • 查看 dotnet pack 命令帮助信息:
PS F:\gitee> dotnet pack -h
Description:.NET Core NuGet 包打包程序用法:dotnet pack [<PROJECT | SOLUTION>...] [options]参数:<PROJECT | SOLUTION>  要操作的项目或解决方案文件。如果没有指定文件,则命令将在当前目录里搜索一个文件。选项:-o, --output <OUTPUT_DIR>            要放置生成包的输出目录。--artifacts-path <ARTIFACTS_DIR>     工件路径。项目中的所有输出(包括生成、发布和打包输出)都将放到指定路径下的子文件夹 中。--no-build                           打包之前不要生成项目。Implies --no-restore.--include-symbols                    除了输出目录中的常规包之外,还包括带符号的包。--include-source                     包括 PDB 和源文件。源文件放入 nuget 结果包的“src”文件夹中。-s, --serviceable                    在包中设置可用标志。有关详细信息,请参阅 https://aka.ms/nupkgservicing。--nologo                             不显示启动版权标志或版权消息。--interactive                        允许命令停止和等待用户输入或操作(例如,用以完成身份验证)。--no-restore                         生成前请勿还原项目。-v, --verbosity <LEVEL>              设置 MSBuild 详细程度。允许值为 q[uiet]、m[inimal]、n[ormal]、d[etailed] 和 diag[nostic]。--version-suffix <VERSION_SUFFIX>    设置生成项目时使用的 $(VersionSuffix) 属性的值。-c, --configuration <CONFIGURATION>  用于生成包的配置。默认值为 "Release"。--disable-build-servers              强制命令忽略任何永久性生成服务器。--ucr, --use-current-runtime         将当前运行时用作目标运行时。-?, -h, --help                       显示命令行帮助。

关于【dotnet pack】更多信息请查看,https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-pack

使用示例

打包 .net 类库项目

  • 创建一个 .net 类库(classlib) 文件,执行命令:
dotnet new classlib -n ClassLibrary1
  • 在创建的类库项目中,添加如下代码:
namespace ClassLibrary1;public class Class1
{public void SayHi() {Console.WriteLine("helle, dotnet!");}
}
  • 执行 dotnet pack 命令:
dotnet pack \
C:\Users\Jeffrey.Chai\Desktop\test\ClassLibrary1\ClassLibrary1.csproj \
--no-build -o C:\Users\Jeffrey.Chai\Desktop\test\nupkgs \
-c Release \
-p:TargetFrameworks=net8.0 \
-p:PackageVersion=0.0.1

参数说明:

  • --no-build 打包时跳过生成步骤信息;
  • -o|--output 将生成的 nuget 包放置到指定的文件夹中;
  • -c|--configuration 定义生成配置。大多数项目的默认配置为 Debug,但你可以覆盖项目中的生成配置设置;
  • -p:TargetFrameworks 指定生成的 nuget 包依赖 目标框架
  • -p:PackageVersion 指定生成的 nuget 包版本信息;

执行成功后,输出如下信息:

dotnet pack

生成带注释的 nuget 包

通过上面默认的方式构建的 nuget 包是没有注释说明的,在使用的时候看不到包介绍说明不是很方便。

其实想让生成的 nuget 包带注释非常简单,只需要在项目文件加上一个 GenerateDocumentationFile 元数据配置即可。

类库 .csproj 文件完整信息如下:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><GenerateDocumentationFile>true</GenerateDocumentationFile><Version>0.0.1</Version></PropertyGroup></Project>

添加上面信息后,再次执行 dotnet pack 命令即可。

构建特定平台的 nuget 包

有些时候,项目环境因素,我们可能需要构建特定平台的 nuget 包,我们可以添加 --runtime 参数即可。

  • 打包项目,并使用特定运行时 (Windows 10) 进行还原操作:
dotnet pack --runtime win10-x64

参数说明:

  • --runtime 可以指定特定的 .NET RID 目录

关于 .NET RID 目录

RID运行时标识符 的缩写。RID 值用于标识应用程序运行所在的目标平台。.NET 包使用它们来表示 NuGet 包中特定于平台的资产。 以下值是 RID 的示例:linux-x64、win-x64osx-x64。 对于具有本机依赖项的包,RID 将指定在其中可以还原包的平台。

可以在项目文件的 <RuntimeIdentifier> 元素中设置一个 RID。 可以将多个 RID 定义为项目文件的 <RuntimeIdentifiers> 元素中的列表(以分号分隔)。 也可使用以下 .NET CLI 命令 通过 --runtime 选项使用它们:

  • dotnet build
  • dotnet clean
  • dotnet pack
  • dotnet publish
  • dotnet restore
  • dotnet run
  • dotnet store

表示具体操作系统的 RID 通常遵循以下模式:[os].[version]-[architecture]-[additional qualifiers],其中:

  • [os] 是操作系统/平台系统名字对象。 例如 ubuntu

  • [version] 是操作系统版本,使用的格式是以点 (.) 分隔的版本号。 例如 15.10

版本不应为营销版本,因为营销版本通常代表该操作系统的多个离散版本,且具有不同的平台 API 外围应用。

  • [architecture] 是处理器体系结构。 例如:x86、x64、armarm64

  • [additional qualifiers] 进一步区分了不同的平台。 例如:aot

以下示例演示了 runtime.json 文件中定义的另一个略大的 RID 图表:

linux-arm64     linux-arm32|     \   /     ||     linux     ||       |       |unix-arm64   |    unix-x64\   |   /unix|any

关于更多 .NET RID 目录,请查看:https://learn.microsoft.com/zh-cn/dotnet/core/rid-catalog

这篇关于如何使用 dotnet pack 打包 .NET 跨平台程序集?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638083

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n