本文适用于: ✔️ .NET Core 2.1 SDK 及更高版本
“属性”
dotnet publish - 将应用程序及其依赖项发布到文件夹以部署到托管系统。
摘要
dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[-c|--configuration <CONFIGURATION>]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
[--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
[--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--self-contained [true|false]] [--no-self-contained]
[-s|--source <SOURCE>] [-v|--verbosity <LEVEL>]
[--version-suffix <VERSION_SUFFIX>]
dotnet publish -h|--help
描述
dotnet publish 编译应用程序、读取 project 文件中指定的所有依赖项并将生成的文件集发布到目录。 输出包括以下资产:
扩展名为 dll 的程序集中的中间语言 (IL) 代码。
包含项目所有依赖项的 .deps.json 文件。
.runtimeconfig.json 文件,其中指定了应用程序所需的共享运行时,以及运行时的其他配置选项(例如垃圾回收类型)。
应用程序的依赖项,将这些依赖项从 NuGet 缓存复制到输出文件夹。
dotnet publish 命令的输出可供部署至托管系统(例如服务器、电脑、Mac、笔记本电脑)以便执行。 若要准备用于部署的应用程序,这是唯一正式受支持的方法。 根据项目指定的部署类型,托管系统不一定已在其上安装 .NET 共享运行时。 有关详细信息,请参阅使用 .NET CLI 发布 .NET 应用。
隐式还原
无需运行 dotnet restore,因为它由所有需要还原的命令隐式运行,如 dotnet new、dotnet build、dotnet run、dotnet test、dotnet publish 和 dotnet pack。 若要禁用隐式还原,请使用 --no-restore 选项。
在执行显式还原有意义的某些情况下,例如 Azure DevOps Services 中的持续集成生成中,或在需要显式控制还原发生时间的生成系统中,dotnet restore 命令仍然有用。
有关如何使用 NuGet 源的信息,请参阅 dotnet restore 文档。
MSBuild
dotnet publish 命令调用 MSBuild,后者会调用 Publish 目标。 如果特定项目的 IsPublishable 属性设置为 false,则无法调用 Publish 目标,并且 dotnet publish 命令仅在项目上运行隐式 dotnet restore。
任何传递给 dotnet publish 的参数都将传递给 MSBuild。 -c 和 -o 参数分别映射到 MSBuild 的 Configuration 和 PublishDir 属性。
dotnet publish 命令接受 MSBuild 选项,如用来设置属性的 -p 和用来定义记录器的 -l。 例如,可以使用以下格式设置 MSBuild 属性:-p:<NAME>=<VALUE>。
还可通过引用 .pubxml 文件(自 .NET Core 3.1 SDK 起可用)设置与发布相关的属性。 例如:
dotnet publish -p:PublishProfile=FolderProfile
前面的示例使用 <project_folder>/Properties/PublishProfiles 文件夹中的 FolderProfile.pubxml 文件。 如果在设置 PublishProfile 属性时指定路径和文件扩展名,则它们会被忽略。 默认情况下,MSBuild 会在 Properties/PublishProfiles 文件夹中查找,并假定 .pubxml 文件扩展名。 若要指定包含扩展名的路径和文件名,请设置 PublishProfileFullPath 属性,而不是 PublishProfile 属性。
以下 MSBuild 属性更改 dotnet publish 的输出。
PublishReadyToRun
以 ReadyToRun (R2R) 格式编译应用程序集。 R2R 是一种预先 (AOT) 编译形式。 有关详细信息,请参阅 ReadyToRun 图像。 自 .NET Core 3.0 SDK 起可用。
若要查看有关缺少的依赖项可能导致运行时失败的警告,请使用 PublishReadyToRunShowWarnings=true。
建议在发布配置文件中而不是在命令行中指定 PublishReadyToRun。
PublishSingleFile
将应用打包到特定于平台的单个文件可执行文件中。 有关单文件发布的详细信息,请参阅单文件捆绑程序设计文档。 自 .NET Core 3.0 SDK 起可用。
建议在项目文件中而不是在命令行中指定此选项。
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)的路径和文件名,或包含解决方案文件的目录的路径。 如果未指定目录,则默认为当前目录。 自 .NET Core 3.0 SDK 起可用。
选项
-a|--arch <ARCHITECTURE>
指定目标体系结构。 这是用于设置运行时标识符 (RID) 的简写语法,其中提供的值与默认 RID 相结合。 例如,在 win-x64 计算机上,指定 --arch x86 会将 RID 设置为 win-x86。 如果使用此选项,请不要使用 -r|--runtime 选项。 从 .NET 6 Preview 7 开始提供。
-c|--configuration <CONFIGURATION>
定义生成配置。 大多数项目的默认配置为 Debug,但你可以覆盖项目中的生成配置设置。
-f|--framework <FRAMEWORK>
为指定的目标框架发布应用程序。 必须在项目文件中指定目标框架。
--force
强制解析所有依赖项,即使上次还原已成功,也不例外。 指定此标记等同于删除 project.assets.json 文件。
-?|-h|--help
打印出有关如何使用命令的说明。
--interactive
允许命令停止并等待用户输入或操作。 例如,完成身份验证。 自 .NET Core 3.0 SDK 起可用。
--manifest <PATH_TO_MANIFEST_FILE>
指定一个或多个目标清单,用于剪裁与应用程序一同发布的一组包。 清单文件是 dotnet store 命令输出的一部分。 若要指定多个清单,请为每个清单添加一个 --manifest 选项。
--no-build
发布前不生成项目。 还将隐式设置 --no-restore 标记。
--no-dependencies
忽略项目间引用,仅还原根项目。
--nologo
不显示启动版权标志或版权消息。 自 .NET Core 3.0 SDK 起可用。
--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>
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。