Eseguire la migrazione da ASP.NET Core in .NET 8 a ASP.NET Core in .NET 9

Questo articolo illustra come aggiornare un ASP.NET Core in .NET 8 a ASP.NET Core in .NET 9.

Prerequisiti

Aggiornare la versione di .NET SDK in global.json

Se si fa affidamento su un global.json file per specificare una versione specifica di .NET SDK, aggiornare la version proprietà alla versione di .NET 9 SDK installata. Per esempio:

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

Aggiornare il framework di destinazione

Aggiornare il moniker del framework di destinazione del file di progetto (TFM) a net9.0:

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

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

</Project>

Aggiornare i riferimenti del pacchetto

Nel file di progetto, aggiorna l'attributo Microsoft.AspNetCore.* di ogni riferimento al pacchetto Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, System.Net.Http.Json e Version alla versione 9.0.0 o successiva. Per esempio:

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

Sostituire UseStaticFiles con MapStaticAssets

Ottimizzare la gestione dei file statici nelle app Web sostituendo UseStaticFiles con MapStaticAssets nel file dell'app Program :

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

Nelle app MVC & Razor Pages è anche necessario concatenare una chiamata a .WithStaticAssets dopo MapRazorPages o MapControllerRoute in Program.cs. Per un esempio, vedere Distribuire file statici nelle app ASP.NET Core.

ASP.NET Core genera automaticamente gli hash e precomprime i file statici durante la compilazione e la pubblicazione, quindi MapStaticAssets espone i file ottimizzati come endpoint tramite il routing degli endpoint con le intestazioni di cache appropriate.

Per risolvere i nomi di file con impronta digitale dall'app:

  • Nelle Blazor app usare la ComponentBase.Assets proprietà . Aggiornare i riferimenti espliciti agli asset statici nei file del componente Razor (.razor) per utilizzare @Assets["{ASSET PATH}"], dove il segnaposto {ASSET PATH} è il percorso dell'asset. Si noti che questa operazione NON deve essere eseguita per gli script del Blazor framework (blazor.*.js). Nell'esempio seguente Bootstrap, il foglio di stile dell'app del modello di progetto (Blazor) e il foglio di stile per l'isolamento CSS (app.css) (basato sul namespace dell'app ) sono collegati a un componente radice, solitamente componente BlazorSample (App):

    <link rel="stylesheet" href="@Assets["bootstrap/bootstrap.min.css"]" />
    <link rel="stylesheet" href="@Assets["app.css"]" />
    <link rel="stylesheet" href="@Assets["BlazorSample.styles.css"]" />
    
  • Nelle app MVC & Razor Pages, gli helper tag di script e collegamento risolveranno automaticamente i nomi dei file con impronta digitale.

Per risolvere i nomi di file con impronta digitale durante l'importazione di moduli JavaScript, aggiungere una mappa di importazione generata:

  • Nelle app Blazor, aggiungere il componente (ImportMap) nel contenuto <head> del componente radice dell'app, in genere nel componente App (App.razor):

    <ImportMap />
    
  • Nelle app MVC e Razor Pages, aggiungere <script type="importmap"></script> nell'intestazione del file di layout principale, che viene aggiornato dal Tag Helper Import Map.

Per altre informazioni, vedere le risorse seguenti:

Blazor

Adottare la serializzazione semplificata dello stato di autenticazione per Blazor Web Apps

Blazor Web Apps può facoltativamente adottare la serializzazione semplificata dello stato di autenticazione.

Nel progetto server:

  • Rimuovere il provider di stato di autenticazione persistente (PersistingAuthenticationStateProvider.cs).

  • Rimuovere la registrazione del Program servizio dal file. Concatena invece una chiamata a AddAuthenticationStateSerialization su AddRazorComponents:

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

L'API serializza solo le dichiarazioni di nome e di ruolo del lato server per l'accesso nel browser. Per includere tutte le notifiche, impostare SerializeAllClaims su true:

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

Nel progetto client (.Client):

  • Rimuovere il provider di stato di autenticazione persistente (PersistentAuthenticationStateProvider.cs).

  • Rimuovere la registrazione del Program servizio dal file. Chiamare invece AddAuthenticationStateDeserialization sulla raccolta servizi:

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

Per altre informazioni, vedere Novità di ASP.NET Core in .NET 9.

L'attributo di rendering di streaming non richiede più il parametro true

In .NET 8, il rendering in streaming richiedeva di passare true per il parametro enabled:

@attribute [StreamRendering(true)]

In .NET 9 o versione successiva è possibile rimuovere true facoltativamente, perché true è ora l'impostazione predefinita per il parametro enabled:

@attribute [StreamRendering]

Modifiche radicali

Usare gli articoli in Modifiche di rilievo in .NET per trovare modifiche di rilievo che potrebbero essere applicate durante l'aggiornamento di un'app a una versione più recente di .NET.