Переход с ASP.NET Core в .NET 8 на ASP.NET Core в .NET 9

В этой статье объясняется, как обновить ASP.NET Core в .NET 8 до ASP.NET Core в .NET 9.

Предпосылки

  • Visual Studio 2022 с рабочей нагрузкой ASP.NET и разработка веб-приложений.

    Рабочие нагрузки установщика VS22

Обновление версии пакета SDK для .NET в global.json

Если вы используете global.json файл для целевой версии SDK для .NET, обновите свойство version до установленной версии SDK для .NET 9. Рассмотрим пример.

{
  "sdk": {
-    "version": "8.0.100"
+    "version": "9.0.100"
  }
}

Обновление целевой платформы

Обновите идентификатор целевой платформы (TFM) в файле проекта на:net9.0

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFramework>net9.0</TargetFramework>
  </PropertyGroup>

</Project>

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

В файле проекта обновите атрибут Microsoft.AspNetCore.* каждой ссылки на пакет Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, System.Net.Http.Json и Version до версии 9.0.0 или более поздней. Рассмотрим пример.

<ItemGroup>
-   <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="8.0.2" />
-   <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2" />
-   <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
-   <PackageReference Include="System.Net.Http.Json" Version="8.0.0" />
+   <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="9.0.0" />
+   <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0" />
+   <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.0" />
+   <PackageReference Include="System.Net.Http.Json" Version="9.0.0" />
</ItemGroup>

Замените UseStaticFiles на MapStaticAssets.

Оптимизируйте обработку статических файлов в веб-приложениях, заменив UseStaticFiles его MapStaticAssets в файле приложения Program :

- app.UseStaticFiles();
+ app.MapStaticAssets();

В приложениях MVC и Razor Pages вам также нужно добавить в цепочку вызов .WithStaticAssets после MapRazorPages или MapControllerRoute в Program.cs. Пример см. в статических файлах в ASP.NET Core.

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

Чтобы обработать имена файлов с хешем в вашем приложении:

  • В Blazor приложениях используйте свойство ComponentBase.Assets. Обновите явные ссылки на статические ресурсы в файлах компонентов Razor (.razor) так, чтобы использовался @Assets["{ASSET PATH}"], где заполнитель {ASSET PATH} обозначает путь к ресурсу. Обратите внимание, что этого НЕ следует делать для Blazor скриптов платформы (blazor.*.js). В следующем примере Bootstrap, Blazor стилевой файл шаблона проекта (app.css) и стилевой файл изоляции CSS (на основе пространства имен приложения BlazorSample) связаны как в корневом компоненте, как правило, App компонент (Components/App.razor):

    <link rel="stylesheet" href="@Assets["bootstrap/bootstrap.min.css"]" />
    <link rel="stylesheet" href="@Assets["app.css"]" />
    <link rel="stylesheet" href="@Assets["BlazorSample.styles.css"]" />
    
  • В приложениях MVC и Razor Pages вспомогательные элементы тегов script и link автоматически определяют имена файлов с отпечатком.

Чтобы устранить отпечатанные отпечатки имен файлов при импорте модулей JavaScript, добавьте созданную карту импорта:

  • В приложениях Blazor добавьте компонент (ImportMap) в содержимое <head> корневого компонента приложения, обычно в компоненте App (App.razor):

    <ImportMap />
    
  • В приложениях MVC и приложениях со страницами Razor добавьте <script type="importmap"></script> в раздел head основного файла макета, который обновляется вспомогательным компонентом тегов Import Map.

Дополнительные сведения см. в следующих ресурсах:

Blazor

Использовать упрощенную сериализацию состояния аутентификации для Blazor Web Apps

Blazor Web Appпри необходимости можно применить упрощенную сериализацию состояния проверки подлинности.

В серверном проекте:

  • Удалите поставщика постоянного состояния аутентификации (PersistingAuthenticationStateProvider.cs).

  • Удалите регистрацию службы из Program файла. Вместо этого добавьте вызов AddAuthenticationStateSerialization в цепочку вызовов для AddRazorComponents:

    - builder.Services.AddScoped<AuthenticationStateProvider, PersistingAuthenticationStateProvider>();
    
      builder.Services.AddRazorComponents()
          .AddInteractiveServerComponents()
          .AddInteractiveWebAssemblyComponents()
    +     .AddAuthenticationStateSerialization();
    

API сериализует только серверные данные о именах и ролях для доступа в браузере. Чтобы включить все требования, установите SerializeAllClaims на true:

.AddAuthenticationStateSerialization(options => options.SerializeAllClaims = true);

В клиентском проекте (.Client):

  • Удалите поставщик постоянного состояния проверки подлинности (PersistentAuthenticationStateProvider.cs).

  • Удалите регистрацию службы из Program файла. Вместо этого вызовите AddAuthenticationStateDeserialization для коллекции служб:

    - builder.Services.AddSingleton<AuthenticationStateProvider, PersistentAuthenticationStateProvider>();
    + builder.Services.AddAuthenticationStateDeserialization();
    

Дополнительные сведения см. в статье "Новые возможности" ASP.NET Core в .NET 9.

Атрибут потоковой отрисовки больше не требует параметра true

В .NET 8 для потокового рендеринга требовалось передать true в параметр enabled:

@attribute [StreamRendering(true)]

В .NET 9 или более поздней версии true можно удалить, так как true теперь используется по умолчанию для параметра enabled:

@attribute [StreamRendering]

Кардинальные изменения

Используйте статьи в статье Критические изменения в .NET, чтобы найти критические изменения , которые могут применяться при обновлении приложения до более новой версии .NET.