Готовимся к .NET 9
Релиз .NET 9 уже скоро. .NET 9 RC 1 (вышел 10 сентября) уже поставляется с лицензией Go-Live, что означает, что он поддерживается Microsoft для использования в производственных средах. Если вы в настоящее время используете .NET 6 или более новую версию, процесс миграции на .NET 9 довольно прост. Вот несколько ключевых шагов.
1. Обновите зависимости
Это всегда хорошая практика перед миграцией, многие проблемы несовместимости часто решаются таким образом. Отличным инструментом, помогающим в этом, является dotnet-outdated. Чтобы проверить наличие устаревших пакетов, выполните:
dotnet outdated <solution/project folder>
Он даже может обновить пакеты для вас.
2. Удалите устаревшие целевые фреймворки
Если вы всё ещё используете устаревшие фреймворки, такие как net7.0, пришло время избавиться от них. Многие новые сборки .NET 9 нацелены только на .NET 8 и выше. Если вам нужно сохранить совместимость с .NET 6, вы можете использовать условные операторы в ссылках на пакеты в качестве временного решения, например:
<PackageReference Condition=" '$(TargetFramework)' == 'net6.0' " Include="Verify.Http" Version="5.0.1" />
<PackageReference Condition=" '$(TargetFramework)' != 'net6.0' " Include="Verify.Http" Version="6.3.0" />
3. Обновите global.json
Простой способ обновить global.json — удалить его и запустить
dotnet new globaljson
Эта команда создаст global.json, соответствующий версии SDK, который будет без проблем работать в вашем конвейере CI/CD.
4. Добавьте целевую платформу net9.0
Добавьте моникер целевой платформы net9.0 в проект, используя свойство MSBuild TargetFrameworks (если вы используете TargetFramework сегодня и хотите использовать многоцелевую платформу, её необходимо указать в TargetFrameworks), например:
<TargetFrameworks>net9.0;net8.0</TargetFrameworks>
После 12 ноября 2024 поддерживаемыми платформами останутся:
- .NET 8 (Long Term Support - до 10 ноября 2026)
- .NET 9 (Standard Term Support - 18 месяцев с даты релиза).
5. Соберите проект и устраните проблемы
После того, как вы всё настроите, соберите решение и устраните все возникающие проблемы:
- Проблемы с исходным кодом. Возможно, у вас есть методы, которые будут конфликтовать с новинками .NET 9, например, метод расширения Index для IEnumerable<T>.
- Ошибки/предупреждения зависимостей. .NET 9 SDK более открыто сообщает о пакетах с проблемами безопасности или устаревшими зависимостями. Даже транзитивные зависимости (те, на которые вы не ссылаетесь напрямую) могут вызывать предупреждения. Здесь поможет команда
dotnet nuget why <solution/project folder> <packageid>
Вы можете либо закрепить определённые версии, либо перейти на заменяющие пакеты. Одним из распространённых примеров является System.Text.Json, на старые и устаревшие версии которого ссылаются многие пакеты. Явно добавляя ссылку на пакет, вы закрепляете версию, используемую вашим проектом, например:
<PackageReference Include="System.Text.Json" Version="8.0.4" />
Централизованное управление пакетами — хороший вариант для решения в одном месте для обработки версий пакетов, включая транзитивные.
Итого
Фактически, вы можете начать использовать новый .NET 9 SDK сегодня, продолжая ориентироваться на старые фреймворки и получая доступ к новым функциям времени сборки, оставаясь в текущей среде выполнения. В целом, особых проблем быть не должно.
Источник: https://www.devlead.se/posts/2024/2024-09-22-preparing-for-dotnet-9