Поделиться через


Выберите версию .NET для использования

В этой статье описываются политики, используемые средствами .NET, пакетом SDK и средой выполнения для выбора версий. Эти политики обеспечивают баланс между запуском приложений с помощью указанных версий и упрощают обновление компьютеров разработчика и конечных пользователей. Эти политики позволяют:

  • Простое и эффективное развертывание .NET, включая обновления безопасности и надежности.
  • Используйте последние средства и команды независимо от целевой среды выполнения.

Выбор версии происходит:

Остальная часть этого документа изучает эти четыре сценария.

Пакет SDK использует последнюю установленную версию

Команды ПАКЕТА SDK включают dotnet new и dotnet run. Интерфейс командной строки .NET должен выбрать версию пакета SDK для каждой команды dotnet. Он использует последний пакет SDK, установленный на компьютере по умолчанию, даже если:

  • Проект предназначен для более ранней версии среды выполнения .NET.
  • Последняя версия пакета SDK для .NET — это предварительная версия.

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

В некоторых случаях может потребоваться использовать определенную версию пакета SDK. Укажите эту версию в файле global.json.

global.json можно разместить в любом месте в иерархии файлов. В файловой системе вы определяете, к каким проектам относится данная global.json в зависимости от её местоположения. Интерфейс командной строки .NET выполняет поиск global.json-файла итеративно, перемещая путь вверх от текущего рабочего каталога (который не обязательно совпадает с каталогом проекта). Первый global.json-файл, найденный, указывает используемую версию. Если установлена эта версия пакета SDK, используется эта версия. Если пакет SDK, указанный в global.json, не найден, интерфейс командной строки .NET использует правила сопоставления для выбора совместимого пакета SDK или завершается ошибкой, если нет.

В следующем примере показан синтаксис global.json:

{
  "sdk": {
    "version": "5.0.0"
  }
}

Процесс выбора версии пакета SDK:

  1. dotnet выполняет поиск global.json файла, итеративно перенастраивая путь вверх от текущего рабочего каталога.
  2. dotnet использует указанный пакет SDK, который найден в первом global.json.
  3. dotnet использует последний установленный пакет SDK, если global.json не найдено.

Дополнительные сведения о выборе версий пакета SDK см. в разделах правил сопоставления и rollForward статьи global.json обзорных.

Обновление версии пакета SDK

Важно регулярно обновлять последнюю версию пакета SDK для принятия последних функций, улучшений производительности и исправлений ошибок. Чтобы легко проверить наличие обновлений пакета SDK, используйте команду dotnet sdk check. Кроме того, если выбрать определенную версию с помощью global.json, рассмотрите использование средства, например Dependabot, чтобы автоматически обновлять закрепленную версию пакета SDK по мере появления новых версий.

Монтикеры целевой платформы определяют API для времени сборки.

Вы создаете проект на основе API, определенных в целевой платформе, определенной (TFM). В файле проекта укажите целевой платформы. Задайте элемент TargetFramework в файле проекта, как показано в следующем примере:

<TargetFramework>net8.0</TargetFramework>

Проект можно создать на основе нескольких целевых фреймворков (TFM). Настройка нескольких целевых платформ более распространена для библиотек, но также может выполняться с приложениями. Укажите свойство TargetFrameworks (множественное число TargetFramework). Целевые платформы разделены точкой с запятой, как показано в следующем примере:

<TargetFrameworks>net8.0;net47</TargetFrameworks>

Данный пакет SDK поддерживает фиксированный набор платформ, который ограничен целевой платформой среды выполнения, с которой он поставляется. Например, пакет SDK для .NET 8 включает среду выполнения .NET 8, которая является реализацией целевой платформы net8.0. Пакет SDK для .NET 8 поддерживает net7.0, net6.0и net5.0, но не net9.0 (или более поздней версии). Вы устанавливаете пакет SDK для .NET 9, чтобы выполнять сборку для net9.0.

.NET Standard

.NET Standard — это способ ориентироваться на набор API, общий для различных реализаций .NET. Начиная с выпуска .NET 5, который сам по себе является стандартом API, .NET Standard имеет небольшую значимость, за исключением одного сценария: .NET Standard полезен, когда вы хотите нацелиться как на .NET, так и на .NET Framework. .NET 5 реализует все версии .NET Standard.

Дополнительные сведения см. в .NET 5 и .NET Standard.

Обновление приложений, зависящих от платформы

При запуске приложения из исходного кода с dotnet run, в среде развертывания , зависящей от платформы с dotnet myapp.dll, или из исполняемого файла зависимого от платформы с myapp.exe, исполняемый файл dotnet является средой выполнения приложения.

Хост выбирает последнюю версию исправления, установленную на компьютере. Например, если вы указали net5.0 в файле проекта и 5.0.2 является последней установленной средой выполнения .NET, используется среда выполнения 5.0.2.

Если не найдена допустимая 5.0.* версия, используется новая версия 5.*. Например, если вы указали net5.0 и установлен только 5.1.0, приложение запускается с помощью среды выполнения 5.1.0. Это поведение называется переходом на минорную версию. Более низкие версии также не учитываются. Если допустимая среда выполнения не установлена, приложение не будет запускаться.

В нескольких примерах использования демонстрируется поведение, если вы нацелены на 5.0:

  • ✔️ Задано значение 5.0. 5.0.3 — самая высокая версия исправлений. Используется 5.0.3.
  • Указано: ❌ 5.0. Не установлены версии 5.0.* . 3.1.1 — это наивысшая установленная среда выполнения. Отображается сообщение об ошибке.
  • ✔️ Задано значение 5.0. Не установлены версии 5.0.* . 5.1.0 — это самая высокая версия среды выполнения. Используется 5.1.0.
  • Задано значение ❌ 3.0. Не установлены версии 3.x. Установленная версия среды выполнения — 5.0.0, самая последняя. Отображается сообщение об ошибке.

Переход на более новую незначительную версию имеет один побочный эффект, который может повлиять на конечных пользователей. Рассмотрим следующий сценарий:

  1. Приложение указывает, что требуется 5.0.
  2. При запуске версия 5.0.* не установлена, однако 5.1.0 установлена. Будет использоваться версия 5.1.0.
  3. Позже пользователь устанавливает 5.0.3 и снова запускает приложение, теперь будет использоваться 5.0.3.

Возможно, что 5.0.3 и 5.1.0 работают по-разному, особенно для сценариев, таких как сериализация двоичных данных.

Поведение переката управления

Прежде чем переопределить поведение переноса по умолчанию, ознакомьтесь с уровнем совместимости среды выполнения .NET.

Поведение обновления для приложения можно настроить четырьмя разными способами:

  1. Параметр уровня проекта, задав свойство <RollForward>:

    <PropertyGroup>
      <RollForward>LatestMinor</RollForward>
    </PropertyGroup>
    
  2. Файл *.runtimeconfig.json.

    Этот файл создается при компиляции приложения. Если свойство <RollForward> было задано в проекте, оно воспроизводится в файле *.runtimeconfig.json в качестве параметра rollForward. Пользователи могут изменить этот файл, чтобы изменить поведение приложения.

    {
      "runtimeOptions": {
        "tfm": "net5.0",
        "rollForward": "LatestMinor",
        "framework": {
          "name": "Microsoft.NETCore.App",
          "version": "5.0.0"
        }
      }
    }
    
  3. Свойство --roll-forward <value> команды dotnet.

    При запуске приложения можно управлять поведением отката с помощью командной строки:

    dotnet run --roll-forward LatestMinor
    dotnet myapp.dll --roll-forward LatestMinor
    myapp.exe --roll-forward LatestMinor
    
  4. Переменная среды DOTNET_ROLL_FORWARD.

Предшествование

При запуске приложения поведение пересмотра определяется следующим образом, причём более высокие номера имеют приоритет над более низкими номерами:

  1. Сначала оценивается файл конфигурации *.runtimeconfig.json.
  2. Затем рассматривается переменная среды DOTNET_ROLL_FORWARD, которая переопределяет предыдущий результат проверки.
  3. Наконец, любой параметр --roll-forward, переданный в запущенное приложение, переопределяет все остальное.

Значения

Однако, независимо от того, как вы зададите параметр переноса, используйте одно из следующих значений, чтобы определить поведение:

Ценность Описание
Minor значение по умолчанию, если не указано.
Обновление до ближайшей более новой минорной версии, если запрашиваемая минорная версия отсутствует. Если запрошенная минорная версия присутствует, используется политика LatestPatch.
Major Переход на следующую доступную более высокую основную версию и наименьшую минорную версию, если запрашиваемая основная версия отсутствует. Если указана запрошенная основная версия, используется политика Minor.
LatestPatch Переход на последнюю версию исправлений. Это значение отключает переключение на младшую версию.
LatestMinor Перенаправка на более высокую дополнительную версию, даже если запрашивается дополнительная версия.
LatestMajor Обновление до наибольшей основной и наибольшей второстепенной версии, даже если запрошенная основная версия присутствует.
Disable Не выполняйте откат, привязывайте только к указанной версии. Эта политика не рекомендуется использовать для общего использования, так как она отключает возможность переключения на последние исправления. Это значение рекомендуется только для тестирования.

Автономные развертывания включают выбранную среду выполнения.

Вы можете опубликовать приложение в виде автономного дистрибутива. Этот подход объединяет среду выполнения и библиотеки .NET с приложением. Автономные развертывания не имеют зависимости от сред выполнения. Выбор версии среды выполнения происходит во время публикации, а не во время выполнения.

Событие восстановления , возникающее при публикации, выбирает последнюю версию исправления заданного семейства среды выполнения. Например, dotnet publish выберет .NET 5.0.3, если это последняя версия исправления в семействе среды выполнения .NET 5. Целевая платформа (включая последние установленные исправления безопасности) упаковывается в приложение.

Ошибка возникает, если минимальная версия, указанная для приложения, не удовлетворена. dotnet publish связывается с последней версией обновления среды выполнения (в заданном семействе версий major.minor). dotnet publish не поддерживает семантику продвижения dotnet run. Дополнительные сведения о исправлениях и автономных развертываниях см. в статье о выборе исправлений среды выполнения при развертывании приложений .NET.

Для автономных развертываний может потребоваться определенная версия исправления. Можно переопределить минимальную версию исправления среды выполнения (на более высокие или более низкие версии) в файле проекта, как показано в следующем примере:

<PropertyGroup>
  <RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>

Элемент RuntimeFrameworkVersion переопределяет политику версий по умолчанию. Для автономных развертываний RuntimeFrameworkVersion указывает точную версию среды выполнения. Для приложений, зависящих от платформы, RuntimeFrameworkVersion задает минимальную минимальную версию платформы среды выполнения.

См. также