Согласованные и Воспроизводимые Сборки с Помощью global.json. Продолжение
Начало
Понимание версий .NET SDK
Ежегодно выпускается основная версия .NET: 5.0, 6.0, 7.0, 8.0 и скоро 9.0 в ноябре 2024 года. Обычно именно на эту версию разработчики ссылаются в проектах
<TargetFramework>netX.0</TargetFramework>.
Однако пакет SDK для .NET обычно получает ежемесячные обновления, которые могут включать исправления безопасности, новые функции или обновления компонентов, таких как NuGet или MSBuild. Поэтому управление версиями SDK немного отличается от управления версиями среды выполнения. Например, первым SDK для .NET 8 была версия 8.0.100. Эта версия соответствует функциональному диапазону 8.0.1nn. Увеличение цифры сотых в третьем разделе номера версии может указывать на добавление новых функций и, возможно, на критические изменения.
Таким образом, 8.0.101 и 8.0.201 относятся к разным функциональным группам, а 8.0.101 и 8.0.199 — к одной функциональной группе. Изменение цифр nn в 8.0.1nn указывает на то, что новых функций нет, и чаще всего это соответствует исправлениям уязвимостей или ошибок.
Формат версии .NET SDK выглядит так:
x.y.znnЗдесь:
-
x — основная версия, обычно увеличивающаяся с каждым ежегодным основным выпуском.-
y — это дополнительная версия, которая остаётся 0, начиная с .NET 5.-
z — диапазон функций, который может меняться ежемесячно, указывая на добавление новых функций.-
nn — версия исправления, которая может меняться ежемесячно, указывая на исправления ошибок или уязвимостей.Файл global.json
Файл global.json позволяет определить, какая версия .NET SDK используется для запуска команд .NET CLI, таких как dotnet build, dotnet run или dotnet test. При отсутствии этого файла используется последняя версия SDK, установленная на машине. В большинстве случаев файл создаётся в корне решения:
{
"sdk": {
"version": "8.0.300",
"rollForward": "latestPatch",
"allowPrerelease": false
}
}sdk.version - минимальная версия SDK, необходимая в соответствии со стратегией rollForward.sdk.rollForward - можно ли использовать версию выше, чем sdk.version. Некоторые возможные значения:-
latestPatch (по умолчанию) - допускает использование любой более высокой версии исправления, например, 8.0.300 разрешает 8.0.301, 8.0.399 и т.п.-
latestFeature - позволяет использовать любую более высокую функциональность. 8.0.300 разрешает 8.0.400, 8.0.599 и т.п.-
latestMinor - то же для второстепенной версии. 8.0.300 разрешает 8.1.100, 8.2.199 и т.п.-
latestMajor - допускает любую более старшую основную версию.-
disable указывает, что требуется точная версия.Рекомендации
- Используйте последнюю доступную версию SDK, которую вы используете. Его можно получить на странице загрузки .NET SDK.
- Разрешите только исправления, чтобы избежать критических изменений.
- Запретите предварительные версии (
allowPrerelease = false).Цель состоит в том, чтобы обеспечить воспроизводимые сборки и идентичное поведение от машины разработчика до производства.
Окончание следует…
Источник: https://anthonysimmon.com/automate-dotnet-sdk-updates-global-json-renovate/