Обновление .NET до новой версии
В данном примере .NET обновляется до версии 10 под WSL:Ubuntu. В проектах используется база PostgreS, для нее также будут обновлены пакеты поддержки.
Нужно обновить SDK, TargetFramework и все основные пакеты EF/Npgsql.
Проверить установленный SDK
В WSL:
dotnet --list-sdks
Если .NET 10 отсутствует, установить его.
Для Ubuntu/WSL:
sudo apt update
sudo apt install dotnet-sdk-10.0
Потом проверить:
dotnet --list-sdks
Должно появиться что-то вроде:
8.0.xxx
10.0.xxx
Обновить global.json (если есть)
Проверьте:
find . -name global.json
Если файл есть и содержит:
{
"sdk": {
"version": "8.0.127"
}
}
то либо удалить его, либо изменить на:
{
"sdk": {
"version": "10.0.100"
}
}
(точную версию смотрите в dotnet --list-sdks)
Очень полезная команда:
dotnet --info
В выводе будет что-то вроде:
.NET SDK:
Version: 8.0.127
global.json file:
/home/devadmin/projects/global.json
или
global.json file:
Not found
Тогда сразу видно, какой файл фиксирует версию SDK.
Обновить все csproj
Заменить:
<TargetFramework>net8.0</TargetFramework>
на
<TargetFramework>net10.0</TargetFramework>
Можно массово:
grep -R "TargetFramework" .
в файлах csproj нужно обновить только тег <TargetFramework>, версии пакетов в <PackageReference> обновятся при обновлении EF Core.
Обновить EF Core
После перехода на net10:
dotnet add package Microsoft.EntityFrameworkCore --version 10.0.0
dotnet add package Microsoft.EntityFrameworkCore.Design --version 10.0.0
dotnet add package Microsoft.EntityFrameworkCore.Relational --version 10.0.0
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 10.0.0
dotnet add package EFCore.CheckConstraints --version 10.0.0
Обновить инструменты EF
Проверить:
dotnet tool list -g
Если EF старый:
dotnet tool update --global dotnet-ef
Проверить:
dotnet ef --version
Очистить и пересобрать
Из корня решения:
dotnet clean
find . -type d -name bin -exec rm -rf {} +
find . -type d -name obj -exec rm -rf {} +
dotnet restore
dotnet build
Для каждого проекта можно проверить пакеты, которые требуют обновления:
Удобная команда:
dotnet list package --outdated
Она покажет что можно обновить. Например есть такой вывод:
The following sources were used:
https://api.nuget.org/v3/index.json
Project `ReactPostgresWsl.Api` has the following updates to its packages
[net10.0]:
Top-level Package Requested Resolved Latest
> Microsoft.AspNetCore.OpenApi 8.0.27 8.0.27 10.0.8
> Microsoft.EntityFrameworkCore 10.0.0 10.0.0 10.0.8
> Microsoft.EntityFrameworkCore.Design 10.0.0 10.0.0 10.0.8
> Npgsql.EntityFrameworkCore.PostgreSQL 10.0.0 10.0.0 10.0.2
> Swashbuckle.AspNetCore 6.6.2 6.6.2 10.2.1
тогда обновление для проекта будет таким:
dotnet add package Microsoft.AspNetCore.OpenApi --version 10.0.8
dotnet add package Microsoft.EntityFrameworkCore --version 10.0.8
dotnet add package Microsoft.EntityFrameworkCore.Design --version 10.0.8
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 10.0.2
dotnet add package Swashbuckle.AspNetCore --version 10.2.1
После этого:
dotnet restore
dotnet clean
dotnet build
Ещё проверьте версию dotnet-ef:
dotnet ef --version
Если там не 10.x:
dotnet tool update --global dotnet-ef