dotnet publish -p:PublishProfile=FolderProfile
前面的示例使用 <project_folder>/Properties/PublishProfiles 文件夹中的 FolderProfile.pubxml 文件。 如果在设置 PublishProfile
属性时指定路径和文件扩展名,它们将被忽略。 默认情况下,MSBuild 会在 Properties/PublishProfiles 文件夹中查找,并假定 .pubxml 文件扩展名。 若要指定包含扩展名的路径和文件名,请设置 PublishProfileFullPath
属性,而不是 PublishProfile
属性。
在 .pubxml 文件中:
PublishUrl
由 Visual Studio 用来表示发布目标。
PublishDir
CLI 使用 表示发布目标。
如果希望方案在所有位置都能正常工作,可以将这两个属性初始化为 .pubxml 文件中的相同值。 解决 GitHub 问题 dotnet/sdk#20931 后,只需设置其中一个属性。
.pubxml 文件中的某些属性仅受 Visual Studio 使用,对 没有任何影响dotnet publish
。 我们正在努力使 CLI 与 Visual Studio 的行为更加一致。 但 CLI 永远不会使用某些属性。 CLI 和 Visual Studio 都负责打包发布, dotnet/sdk#29817 计划添加对更多与此相关的属性的支持。 但 CLI 不执行发布操作的部署自动化方面,并且不支持与此相关的属性。 不支持的最值得注意的 dotnet publish
.pubxml 属性是影响生成的以下属性:
LastUsedBuildConfiguration
Configuration
Platform
LastUsedPlatform
TargetFramework
TargetFrameworks
RuntimeIdentifier
RuntimeIdentifiers
MSBuild 属性
以下 MSBuild 属性更改 dotnet publish
的输出。
PublishReadyToRun
以 ReadyToRun (R2R) 格式编译应用程序集。 R2R 是一种预先 (AOT) 编译形式。 有关详细信息,请参阅 ReadyToRun 图像。
若要查看有关缺少的依赖项可能导致运行时失败的警告,请使用 PublishReadyToRunShowWarnings=true
。
建议在发布配置文件中而不是在命令行中指定 PublishReadyToRun
。
PublishSingleFile
将应用打包到特定于平台的单个文件可执行文件中。 有关单文件发布的详细信息,请参阅单文件捆绑程序设计文档。
建议在项目文件中而不是在命令行中指定此选项。
PublishTrimmed
在发布自包含的可执行文件时,剪裁未使用的库以减小应用的部署大小。 有关详细信息,请参阅剪裁自包含部署和可执行文件。 自 .NET 6 SDK 起可用。
建议在项目文件中而不是在命令行中指定此选项。
有关更多信息,请参见以下资源:
MSBuild 命令行参考
用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml)
dotnet msbuild
工作负载清单下载
运行此命令时,它将为工作负载启动播发清单的异步后台下载。 如果此命令完成后,下载仍在运行,则将停止下载。 有关详细信息,请参阅播发清单。
PROJECT|SOLUTION
要发布的项目或解决方案。
PROJECT
是 C#、F# 或 Visual Basic 项目文件的路径和文件名,或包含 C#、F# 或 Visual Basic 项目文件的目录的路径。 如果未指定目录,则默认为当前目录。
SOLUTION
是解决方案文件(扩展名为 .sln)的路径和文件名,或包含解决方案文件的目录的路径。 如果未指定目录,则默认为当前目录。
--manifest <PATH_TO_MANIFEST_FILE>
指定一个或多个目标清单,用于剪裁与应用程序一同发布的一组包。 清单文件是 dotnet store
命令输出的一部分。 若要指定多个清单,请为每个清单添加一个 --manifest
选项。
--no-build
发布前不生成项目。 还将隐式设置 --no-restore
标记。
--no-dependencies
忽略项目间引用,仅还原根项目。
--nologo
不显示启动版权标志或版权消息。
--no-restore
运行此命令时不执行隐式还原。
-o|--output <OUTPUT_DIRECTORY>
指定输出目录的路径。
如果未指定,则默认为依赖框架的可执行文件和跨平台二进制文件的路径 [project_file_folder]/bin/[configuration]/[framework]/publish/。 默认为独立的可执行文件路径 [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/。
在 Web 项目中,如果输出文件夹位于项目文件夹,则连续的 dotnet publish
命令将产生嵌套的输出文件夹。 例如,如果项目文件夹是“myproject”,发布输出文件夹是“myproject/publish”,并且运行 dotnet publish
两次,则第二次运行会将“.config”和“.json”等内容文件放入“myproject/publish/publish” 。 若要避免嵌套发布文件夹,请指定不在项目文件夹 正下方 的发布文件夹,或从项目中排除发布文件夹。 若要排除名为“publishoutput”的发布文件夹,请将以下元素添加到“.csproj”文件中的 PropertyGroup
元素中 :
<DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
.NET 7.0.200 SDK 及更高版本
如果在解决方案中运行此命令时指定 --output
选项,则 CLI 将因输出路径的语义不明确而发出警告(7.0.200 中的一个错误)。 不允许 --output
选项,因为所有生成项目的所有输出都将复制到指定的目录中,该目录与多目标项目以及具有不同版本的直接和可传递依赖项的项目不兼容。 有关详细信息,请参阅解决方案级 --output
选项不再对生成相关命令有效。
.NET Core 3.x SDK 和更高版本
如果在发布项目时指定相对路径,则生成的输出目录相对于当前工作目录,而不是项目文件位置。
如果在发布解决方案时指定相对路径,则所有项目的所有输出都会进入相对于当前工作目录的指定文件夹中。 若要使发布输出进入每个项目的单独文件夹,请使用 msbuild PublishDir
属性(而不是 --output
选项)指定相对路径。 例如,dotnet publish -p:PublishDir=.\publish
将每个项目的发布输出发送到包含项目文件的文件夹下的 publish
文件夹中。
.NET Core 2.x SDK
如果在发布项目时指定相对路径,则生成的输出目录相对于项目文件位置,而不是当前工作目录。
如果在发布解决方案时指定相对路径,则每个项目的输出会进入相对于项目文件位置的单独文件夹中。 如果在发布解决方案时指定绝对路径,则所有项目的所有发布输出都会进入指定文件夹中。
--sc|--self-contained [true|false]
.NET 运行时随应用程序一同发布,因此无需在目标计算机上安装运行时。 如果指定了运行时标识符,并且项目是可执行项目(而不是库项目),则默认值为 true
。 有关详细信息,请参阅 .NET 应用程序发布和使用 .NET CLI 发布 .NET 应用。
如果在未指定 true
或 false
的情况下使用此选项,则默认值为 true
。 在这种情况下,请不要紧接在 --self-contained
后放置解决方案或项目参数,因为该位置需要 true
或 false
。
--no-self-contained
等效于 --self-contained false
。
--source <SOURCE>
要在还原操作期间使用的 NuGet 包源的 URI。
-r|--runtime <RUNTIME_IDENTIFIER>
发布针对给定运行时的应用程序。 有关运行时标识符 (RID) 的列表,请参阅 RID 目录。 有关详细信息,请参阅 .NET 应用程序发布和使用 .NET CLI 发布 .NET 应用。 如果使用此选项,则还要使用 --self-contained
或 --no-self-contained
。
-v|--verbosity <LEVEL>
设置命令的详细级别。 允许使用的值为 q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
和 diag[nostic]
。 默认值为 minimal
。 有关详细信息,请参阅 LoggerVerbosity。
--use-current-runtime, --ucr [true|false]
根据计算机之一将 RuntimeIdentifier
设置为平台可移植的 RuntimeIdentifier
。 需要 RuntimeIdentifier
(例如 SelfContained
、PublishAot
、PublishSelfContained
、PublishSingleFile
和 PublishReadyToRun
)的属性会隐式发生这种情况。 如果该属性设置为 false,则不再发生隐式解析。
--version-suffix <VERSION_SUFFIX>
定义版本后缀来替换项目文件的版本字段中的星号 (*
)。
为当前目录中的项目创建一个依赖框架的跨平台二进制文件:
dotnet publish
自 .NET Core 3.0 SDK 起,此示例还为当前平台创建依赖框架的可执行文件。
针对特定运行时,为当前目录中的项目创建独立可执行文件:
dotnet publish --runtime osx.10.11-x64
项目文件中必须包含 RID。
针对特定平台,为当前目录中的项目创建依赖框架的可执行文件:
dotnet publish --runtime osx.10.11-x64 --self-contained false
项目文件中必须包含 RID。 此示例适用于 .NET Core 3.0 SDK 及更高版本。
针对特定运行时和目标框架,在当前目录中发布项目:
dotnet publish --framework netcoreapp3.1 --runtime osx.10.11-x64
发布指定的项目文件:
dotnet publish ~/projects/app1/app1.csproj
发布当前应用程序,但在还原操作期间不还原项目到项目 (P2P) 引用,只还原根项目:
dotnet publish --no-dependencies
.NET 应用程序发布概述
使用 .NET CLI 发布 .NET 应用
运行时标识符 (RID) 目录
使用 dotnet publish 容器化 .NET 应用
处理 macOS Catalina 公证
已发布应用程序的目录结构
MSBuild 命令行参考
用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml)
dotnet msbuild
裁剪独立部署