Поделиться через


Миграция из 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 Core, обновите version свойство до установленной версии пакета SDK для .NET 9.0. Например:

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

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

Обновите moniker целевой платформы проекта (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). В следующем примере Начальная загрузка, 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 вспомогательные функции тегов скриптов и ссылок автоматически разрешают отпечатанные имена файлов.

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

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

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

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

Blazor

Внедрение упрощенной сериализации состояния проверки подлинности для Blazor Web Apps

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

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

  • Удалите поставщика состояния сохраняемой проверки подлинности (PersistingAuthenticationStateProvider.cs).

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

    - 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 9.0.

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

В .NET 8 потоковой отрисовки требуется передать для параметра :

@attribute [StreamRendering(true)]

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

@attribute [StreamRendering]

Дополнительные ресурсы