- 功能
将应用程序及其依赖项打包到一个文件夹中,以便部署到生产环境。
- 主要作用
- 编译应用程序
- 执行与 dotnet build 类似的编译过程。
- 收集依赖项
- 将所有依赖项(包括项目依赖和 NuGet 包)复制到输出目录。
- 准备部署包
- 优化输出
- 可执行特定于发布的各种优化(如剪裁未使用的代码)。
- 格式
dotnet publish [<PROJECT | SOLUTION>...] [options]
- [<PROJECT | SOLUTION>…] :要操作的项目或解决方案文件。如果没有指定文件,则命令将在当前目录里搜索一个文件。
- [options]:选项
| 基本参数 | 缩写 | 作用 | 示例 |
|---|
| –output <OUTPUT_DIR> | -o | 指定目标路径 | dotnet publish -o ./publish |
| –configuration <CONFIGURATION> | -c | 指定发布的配置(Debug/Release),默认值为Debug | dotnet publish -c Debug |
| –framework <FRAMEWORK> | -f | 指定发布的目标框架 | dotnet publish --framework netcoreapp3.1 |
| –runtime <RUNTIME_IDENTIFIER> | -r | 指发布的目标运行时(win-x64/linux-x64) | dotnet publish --runtime linux-x64 |
| 部署模式 | 缩写 | 作用 | 示例 |
|---|
| –self-contained | –sc | 随应用程序一起发布.NET运行时,这样就不需要在目标计算机上安装运行时。如果指定了运行时标识符,则默认值为true | dotnet publish --self-contained -r linux-x64 |
| –no-self-contained | | 将应用程序发布为依赖框架的应用程序,目标计算机上必须安装兼容的.NET运行时才能运行该应用程序 | dotnet publish --no-self-contained -r win-x64 |
| 单文件发布参数(需加 -p: 前缀) | 缩写 | 作用 | 示例 |
|---|
| -p:PublishSingleFile=true | | 生成单个可执行文件(合并所有依赖) | dotnet publish -p:PublishSingleFile=true -r win-x64 |
| -p:IncludeNativeLibrariesForSelfExtract=true | | 将原生库(如 .dll/.so)打包到单文件中(运行时解压) | dotnet publish -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true |
| -p:EnableCompressionInSingleFile=true | | 启用单文件内部压缩(减小体积) | dotnet publish -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true |
| 剪裁优化参数(需加 -p: 前缀) | 缩写 | 作用 | 示例 |
|---|
| -p:PublishTrimmed=true | | 移除未使用的代码(IL Linker) | dotnet publish -p:PublishTrimmed=true -r win-x64 |
| -p:TrimMode=link | | 剪裁模式(link=激进,copyused=保守),默认copyused | dotnet publish -p:PublishTrimmed=true -p:TrimMode=link |
| -p:TrimGraph=true | | 启用依赖图分析(更彻底剪裁) | dotnet publish -p:PublishTrimmed=true -p:TrimGraph=true |
| -p:TrimmerDefaultAction=link | | 控制未标注程序集的默认剪裁行为(link=剪裁,copy=保留) | dotnet publish -p:PublishTrimmed=true -p:TrimmerDefaultAction=link |
| 原生依赖参数(需加 -p: 前缀) | 缩写 | 作用 | 示例 |
|---|
| -p:IncludeAllContentForSelfExtract=true | | 将配置文件、资源文件等所有内容嵌入单文件,运行时解压到临时目录 | dotnet publish -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true |
| -p:StripSymbols=true | | 移除调试符号(减小体积) | dotnet publish -p:StripSymbols=true -c Release |
| -p:DebugType=embedded | | 将调试信息嵌入程序集(配合 -c Debug) | dotnet publish -c Debug -p:DebugType=embedded |
| 平台特定参数(需加 -p: 前缀) | 缩写 | 作用 | 示例 |
|---|
| -p:PublishReadyToRun=true | | 启用 AOT 编译(提升启动性能,增大体积) | dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true |
| -p:ReadyToRunShowWarnings=true | | 显示 R2R 编译警告 | dotnet publish -p:PublishReadyToRun=true -p:ReadyToRunShowWarnings=true |
| -p:PublishProtocol=FileSystem | | 发布协议(默认为 FileSystem,可选 Sockets 等) | dotnet publish -p:PublishProtocol=FileSystem |
| 高级 MSBuild 参数(需加 -p: 前缀) | 缩写 | 作用 | 示例 |
|---|
| -p:DefineConstants=“SYMBOL” | | 定义编译符号(多个符号用分号分隔(如 “DEBUG;TRACE”)) | dotnet publish -p:DefineConstants="DEMO_MODE" |
| -p:AssemblyVersion=1.0.0 | | 手动指定程序集版本 | dotnet publish -p:AssemblyVersion=2.1.0.3 |
| -p:CopyOutputSymbolsToPublishDirectory=false | | 禁止复制.pdb调试符号到发布目录 | dotnet publish -c Release -p:CopyOutputSymbolsToPublishDirectory=false |
| 其他参数 | 缩写 | 作用 | 示例 |
|---|
| –version-suffix <VERSION_SUFFIX> | | 为程序集版本添加后缀 | dotnet publish --version-suffix "beta1" 需在.csproj中设置<VersionPrefix>,生成格式:1.0.0-beta1 |
| –use-current-runtime | | 将当前运行时用作目标运行时 | dotnet publish --use-current-runtime 不能与-r同时使用 |
| –manifest <MANIFEST> | | 指向目标清单文件的路径,该文件包含要通过发布步骤执行的包的列表 | dotnet publish --manifest ./publish/profile.xml |
| –no-build | | 跳过编译,直接发布已生成的程序 | dotnet publish --no-build |
| –nologo | | 不显示启动版权标志或版权消息 | dotnet publish --nologo |
| –interactive | | 允许命令停止和等待用户输入或操作(例如:用以完成身份验证) | dotnet publish --interactive |
| –no-restore | | 跳过自动还原 NuGet 包 | dotnet publish --no-restore |
| –verbosity <LEVEL> | -v | 控制日志详细程度(quiet/minimal/normal/detailed/diagnostic) | dotnet publish -v minimal |
| –arch <arch> | -a | 目标体系结构(x64/arm64) | dotnet publish --arch x64 |
| –os <os> | | 目标操作系统(linux/windows) | dotnet publish --os linux |
| –help | -?,-h | 显示命令行帮助 | dotnet publish -h |
# 指定Release模式、指定linux-x64版本、将.NET打包进发布文件、打包单个文件、启动裁剪模式删除无用代码、指定版本号
dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true -p:AssemblyVersion=1.0.0
- 示例
- 在执行指令前,先通过
cd命令切换到项目路径下; - 发布的文件路径在
.../publish/中;
