Совместимо ли .NET Core Runtime с предыдущими выпусками? - PullRequest
4 голосов
/ 29 марта 2019

Если я установил последнюю версию .NET Core Runtime (на данный момент это версия 2.2.3):

https://dotnet.microsoft.com/download/dotnet-core/2.2

Является ли эта установка обратно совместимой с предыдущими выпусками .NET Core?

Например, будет ли вышеуказанная установка совместима с приложением, нацеленным на:

  • netcoreapp1.0
  • netcoreapp2.0
  • netcoreapp2.1
  • netcoreapp2.2

Я понимаю, что среды выполнения .NET можно устанавливать параллельно. Однако это не отвечает на мой вопрос. Совместима ли установка 2.2 с предыдущими выпусками, так что дополнительные среды выполнения не нужны?

1 Ответ

2 голосов
/ 29 марта 2019

tldr;

Да. Установив .NET Core Runtime 2.2.3, вы можете запускать приложения, нацеленные на netcoreapp2.0, netcoreapp2.1 и netcoreapp2.2, без необходимости установки дополнительных сред выполнения.

... Обновления среды выполнения NET Core совместимы с основной версией «группа», такая как 1.x и 2.x.

(Незначительные обновления в том же основном выпуске обратно совместимы)

Кроме того, новые версии .NET Core SDK обычно поддерживают возможность создавать приложения, предназначенные для предыдущих версий время выполнения совместимым образом

(последний SDK может быть ориентирован на предыдущие версии)

В общем, вам нужен только последний SDK и последняя версия патча время выполнения, необходимое для вашего приложения.

(Вообще говоря, вам нужно только установить последнюю версию SDK / runtime)

Со временем по мере установки обновленных версий среды выполнения .NET Core и SDK, вы можете удалить устаревшие версии .NET Core из твоя машина. Удаление старых версий среды выполнения может изменить выбрана среда выполнения для запуска приложений с общей структурой

(Поскольку вы устанавливаете дополнительные SDK / среды выполнения с течением времени, вы должны время от времени удалять более старые версии в пользу последних)

Источник: https://docs.microsoft.com/en-us/dotnet/core/versions/remove-runtime-sdk-versions?tabs=windows

.NET Core Versioning

Согласно документации:

«.NET Core 2.1» относится к номеру версии .NET Core Runtime. .NET Core Runtime имеет основной / минорный / патч подход к управлению версиями, который следует семантическому версионированию.

Другими словами, выпуски среды выполнения .NET Core следуют схеме Semantic Versioning :

[Major]. [Minor]. [Patch]

Где:

  • Крупные обновления вводят критические изменения
  • Незначительные обновления - это обновления функций, которые обратно совместимы с предыдущими второстепенными выпусками
  • Обновления исправлений - это обычно исправления ошибок или исправления безопасности для существующих функций (также обратно совместимые с предыдущими второстепенными выпусками)

Итак, ответ на поставленный выше вопрос основан на семантическом управлении версиями:

  • Основные обновления несовместимы с предыдущей основной версией
  • Незначительные обновления и / или исправления имеют обратную совместимость с той же версией

При таком понимании, когда приложения .NET Core создаются / публикуются / восстанавливаются, они ориентированы на основной выпуск и набор функций, как указано номерами основных / вспомогательных версий, найденными в имени среды выполнения. Так, netcoreapp2.2 обратно совместим с netcoreapp2.1 , что, в свою очередь, обратно совместимо с netcoreapp2.0 . Но все они несовместимы с netcoreapp1.x или netcoreapp3.x .

С одной установкой среды выполнения .NET Core 2.1.5 и при условии развертывания публикации на основе фреймворка вы сможете запускать приложения с таргетингом:

  • netcoreapp2.0
  • netcoreapp2.1

Но не:

  • netcoreapp1.0 (несовместимо)
  • netcoreapp2.2 (не поддерживается)

Если установлено несколько сред выполнения, то точное время выполнения выбирается на основе последней установленной среды выполнения с самым высоким исправлением.

О SDK

SDK не основан на семантическом управлении версиями. Однако каждый SDK предназначен для максимального времени выполнения .NET Core и поддерживает все версии до него.

Это означает, что вам не нужно устанавливать более одного SDK на свой сервер сборки, если вы хотите выполнить сборку с несколькими средами выполнения (даже если бы вы могли).SDK уже включает в себя все необходимые среды выполнения для сборки приложений на текущей версии (или любой предыдущей версии) из коробки .Например, если вы устанавливаете .NET Core 2.2.105 SDK, вы можете собрать для netcoreapp1.0, netcoreapp2.0, netcoreapp2.1 или netcoreapp2.2.Но вы не можете собрать для .NET Core 2.3 или 3.0.

Пример

Предположим, у меня есть сервер сборки, на котором установлен последний .NET Core SDKустановлен ( SDK 2.2.105 - 2.2.3 Runtime ).

Хотя SDK 2.2.105 установлен, я могу захотеть создать и опубликовать приложение .NET Core 2.1:

dotnet publish 
     /p:Configuration=Release -r win-x64 --self-contained false
     /p:IsWebConfigTransformDisabled=true --framework netcoreapp2.1
     /p:DebugSymbols=false /p:DebugType=None
  • /p:Configuration=Release - настройка для выпуска
  • -r win-x64 - целевое развертывание Windows (а не переносное)
  • --self-contained false - зависимое от платформы развертывание (требуетсясреда выполнения должна быть установлена ​​на хосте)
  • /p:IsWebConfigTransformDisabled=true - не преобразовывать web.config во избежание ошибок с файлом web.config по умолчанию, сгенерированным Visual Studio (может потребоваться при переходе с 2.1 на 2.2)
  • --framework netcoreapp2.1 - явно нацелен на среду исполнения
  • /p:DebugSymbols=false /p:DebugType=None - отключить файлы .PDB

Эту сборку можно установить на производственном сервере с последней версией .NET Core Runtime + Hosting Bundle 2.2.3 - другие среды выполнения (или SDK) не требуются

Надеюсь, это поможет кому-то еще

...