# Настройка .NET под Linux

# Обновление .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>
```

<div class="relative w-full mt-4 mb-1" id="bkmrk-"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--1"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class="">  
</div></div></div></div>Можно массово:

```
grep -R "TargetFramework" .
```

в файлах csproj нужно обновить только тег &lt;TargetFramework&gt;, версии пакетов в &lt;PackageReference&gt; обновятся при обновлении 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
```

<div class="relative w-full mt-4 mb-1" id="bkmrk-%D0%94%D0%BB%D1%8F-%D0%BA%D0%B0%D0%B6%D0%B4%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0-"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""></div></div></div></div></div></div></div><div class="">Для каждого проекта можно проверить пакеты, которые требуют обновления:</div></div></div>Удобная команда:

```
dotnet list package --outdated
```

Она покажет что можно обновить. Например есть такой вывод:

```bash
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
```

тогда обновление для проекта будет таким:

```bash
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
```