自包含部署运行时前滚

.NET Core 独立应用程序部署 包括 .NET Core 库和 .NET Core 运行时。 从 .NET Core 2.1 SDK(版本 2.1.300)开始,自包含应用程序部署在计算机上发布最高版本的修补程序运行时。 默认情况下,自包含部署的 dotnet publish 选择作为发布计算机上 SDK 一部分而安装的最新版本。 这样,您部署的应用程序可以在publish期间使用可用的安全修补程序(和其他修补程序)运行。 必须重新发布应用程序才能获取新修补程序。 通过在命令上-r <RID>指定dotnet publish或通过在项目文件(csproj/vbproj)或命令行中指定运行时标识符(RID)来创建自包含应用程序。

修补程序版本前滚概述

restorebuildpublishdotnet可以单独运行的命令。 运行时选择是 restore 操作的一部分,不是 publishbuild。 如果调用 publish,将选择最新的修补程序版本。 如果调用带有 publish 参数的 --no-restore,则可能不会获取所需的修补程序版本,因为没有先使用新的自包含应用程序发布策略执行 restore。 在这种情况下,会生成类似以下内容的构建错误文本:

“项目已使用 Microsoft.NETCore.App 版本 2.0.0 还原,但使用当前设置时,将改用版本 2.0.6。 若要解决此问题,请确保使用相同的设置用于还原和后续作,例如生成或发布。 如果 RuntimeIdentifier 属性是在生成或发布期间设置的,但在还原期间未设置,则通常会发生此问题。

注释

restorebuild 可以作为另一命令的一部分被隐式运行,例如 publish。 作为另一个命令的一部分隐式运行时,会提供附加上下文,以便生成正确的项目。 如果使用某个运行时(例如 publish)执行 dotnet publish -r linux-x64,隐式的 restore 会还原 linux-x64 运行时的包。 如果显式调用 restore ,默认情况下它不会还原运行时包,因为它没有该上下文。

如何避免在 publish 过程中 restore

你可能在进行 restore 操作时不需要运行 publish。 在创建自包含应用程序时,若要避免在 restore 过程中进行 publish,请执行以下操作:

  • RuntimeIdentifiers 属性设置为要发布的所有 RID 的分号分隔列表。
  • TargetLatestRuntimePatch 属性设置为 true

使用 dotnet publish 选项的 no-restore 参数

如果要使用同一项目文件创建自包含应用程序和依赖框架的应用程序,并且打算使用 --no-restore 参数与 dotnet publish 一起使用,那么请选择以下选项之一:

  1. 首选依赖框架的行为。 如果应用程序依赖于框架,则这是默认行为。 如果应用程序是自包含的,并且可以使用未修补的 2.1.0 本地运行时,请在项目文件中将 TargetLatestRuntimePatch 设置为 false

  2. 首选自包含行为。 如果应用程序是自包含的,则这是默认行为。 如果应用程序依赖于框架,并且需要安装最新的修补程序,请在项目文件中将TargetLatestRuntimePatch设置为true

  3. 通过在项目文件中将 RuntimeFrameworkVersion 设定为特定补丁版本来明确控制运行时框架版本。