Обновление версии среды выполнения автономного развертыванияSelf-contained deployment runtime roll forward

Автономные развертывания приложений в .NET Core включают библиотеки .NET Core и среду выполнения .NET Core..NET Core self-contained application deployments include both the .NET Core libraries and the .NET Core runtime. Начиная с пакета SDK для .NET Core 2.1 (версии 2.1.300), при автономном развертывании приложений публикуются последние исправления среды выполнения на компьютере.Starting in .NET Core 2.1 SDK (version 2.1.300), a self-contained application deployment publishes the highest patch runtime on your machine. По умолчанию dotnet publish для автономного развертывания выбирает последнюю версию, установленную как часть пакета SDK на компьютере для публикации.By default, dotnet publish for a self-contained deployment selects the latest version installed as part of the SDK on the publishing machine. Благодаря этому развернутое приложение запускается с исправлениями для системы безопасности (и другими исправлениями), доступными во время публикации publish.This enables your deployed application to run with security fixes (and other fixes) available during publish. Приложение должно быть опубликовано повторно для получения нового исправления.The application must be re-published to obtain a new patch. Чтобы создать автономное приложение, укажите параметр -r <RID> в команде dotnet publish или укажите идентификатор среды выполнения (RID) в файле проекта (CSPROJ или VBPROJ) или в командной строке.Self-contained applications are created by specifying -r <RID> on the dotnet publish command or by specifying the runtime identifier (RID) in the project file (csproj / vbproj) or on the command line.

Общие сведения об обновлении версии исправленияPatch version roll forward overview

restore, build и publish — это команды dotnet, которые выполняются отдельно.restore, build and publish are dotnet commands that can run separately. Выбор среды выполнения является частью операции restore, а не publish или build.The runtime choice is part of the restore operation, not publish or build. При вызове команды publish выбирается последняя версия исправлений.If you call publish, the latest patch version will be chosen. Команда publish с аргументом --no-restore может не дать нужную версию исправлений, если предварительно не выполнена команда restore с новой политикой публикации автономных приложений.If you call publish with the --no-restore argument, then you may not get the desired patch version because a prior restore may not have been executed with the new self-contained application publishing policy. В этом случае возникает ошибка сборки со следующим или подобным текстом:In this case, a build error is generated with text similar to the following:

"Проект был восстановлен с использованием Microsoft.NETCore.App версии 2.0.0, но с текущими параметрами будет использоваться версия 2.0.6."The project was restored using Microsoft.NETCore.App version 2.0.0, but with current settings, version 2.0.6 would be used instead. Чтобы устранить эту проблему, убедитесь, что для операции восстановления и для последующих операций, например сборки или публикации, используются одинаковые параметры.To resolve this issue, make sure the same settings are used for restore and for subsequent operations such as build or publish. Обычно эта проблема возникает, если свойство RuntimeIdentifier задается во время сборки или публикации, а не во время восстановления".Typically this issue can occur if the RuntimeIdentifier property is set during build or publish but not during restore."

Примечание

restore и build могут выполняться неявно как часть другой команды, например publish.restore and build can be run implicitly as part of another command, like publish. При неявном выполнении в рамках другой команды им предоставляется дополнительный контекст для создания подходящих артефактов.When run implicitly as part of another command, they are provided with additional context so that the right artifacts are produced. Когда вы выполняете операцию publish в среде выполнения (например, dotnet publish -r linux-x64), неявная команда restore восстанавливает пакеты для среды выполнения linux x64.When you publish with a runtime (for example, dotnet publish -r linux-x64), the implicit restore restores packages for the linux-x64 runtime. Если вы явно вызываете методrestore, он не восстанавливает пакеты среды выполнения по умолчанию, поскольку у него нет этого контекста.If you call restore explicitly, it does not restore runtime packages by default, because it doesn't have that context.

Как избежать восстановления во время публикацииHow to avoid restore during publish

Выполнение операции restore в рамках операции publish может привести к нежелательным результатам.Running restore as part of the publish operation may be undesirable for your scenario. Чтобы избежать операции restore во время операции publish при создании автономных приложений, выполните следующие действия:To avoid restore during publish while creating self-contained applications, do the following:

  • Установите для свойства RuntimeIdentifiers разделенный точкой с запятой список идентификаторов RID для публикации.Set the RuntimeIdentifiers property to a semicolon-separated list of all the RIDs to be published.
  • Задайте для свойства TargetLatestRuntimePatch значение true.Set the TargetLatestRuntimePatch property to true.

Аргумент no-restore в параметрах dotnet publishNo-restore argument with dotnet publish options

Если вы хотите создать автономные приложения и приложения, зависящие от платформы, в одном файле проекта и использовать аргумент --no-restore с dotnet publish, выберите один из следующих вариантов:If you want to create both self-contained applications and framework-dependent applications with the same project file, and you want to use the --no-restore argument with dotnet publish, then choose one of the following:

  1. Выберите поведение зависимости от платформы.Prefer the framework-dependent behavior. Если приложение зависит от платформы, это поведение по умолчанию.If the application is framework-dependent, this is the default behavior. Если приложение является автономным и может использовать локальную среду выполнения 2.1.0 без исправлений, установите для параметра TargetLatestRuntimePatch значение false в файле проекта.If the application is self-contained, and can use an unpatched 2.1.0 local runtime, set the TargetLatestRuntimePatch to false in the project file.

  2. Выберите автономное поведение.Prefer the self-contained behavior. Если приложение автономное, это поведение по умолчанию.If the application is self-contained, this is the default behavior. Если приложение зависит от платформы и требует установки последнего исправления, установите для параметра TargetLatestRuntimePatch значение true в файле проекта.If the application is framework-dependent, and requires the latest patch installed, set TargetLatestRuntimePatch to true in the project file.

  3. Вы можете явным образом контролировать версию среды выполнения платформы, установив для параметра RuntimeFrameworkVersion конкретную версию исправления в файле проекта.Take explicit control of the runtime framework version by setting RuntimeFrameworkVersion to the specific patch version in the project file.