Partilhar via


Migrar do ASP.NET Core 6.0 para 7.0

Este artigo explica como atualizar um projeto existente do ASP.NET Core 6.0 para o ASP.NET Core 7.0.

Pré-requisitos

Atualizar a versão do SDK do .NET Core no global.json

Se você depender de um arquivo global.json para direcionar uma versão específica do SDK do .NET Core, atualize a propriedade version para a versão do SDK do .NET 7.0 instalada. Por exemplo:

{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

Atualizar a estrutura de destino

Atualize o TFM (Moniker da Estrutura de Destino) do arquivo de projeto para net7.0:

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

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

</Project>

Referências do pacote de atualização

No arquivo de projeto, atualize cada atributo Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.* e System.Net.Http.Json da referência do pacote Version para 7.0.0 ou posterior. Por exemplo:

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

Blazor

Adotar recursos do .NET 7

Depois de seguir as diretrizes anteriores nesse artigo para atualizar um aplicativo para 7.0, adote recursos específicos seguindo os links em Novidades no ASP.NET Core 7.0.

Para adotar todos os novos recursos 7.0 para aplicativos do Blazor, recomendamos o seguinte processo:

  • Crie um novo projeto 7.0 Blazor de um dos modelos de projeto Blazor. Para obter mais informações, confira Ferramentas para ASP.NET Core Blazor.
  • Mova os componentes e o código do aplicativo para o aplicativo 7.0 fazendo modificações para adotar os novos recursos 7.0.

Simplifique a vinculação de parâmetros de componentes

Em versões anteriores Blazor , a associação em vários componentes exigia a associação a propriedades com get/set acessadores.

No .NET 6 e versões anteriores:

<NestedGrandchild @bind-GrandchildMessage="BoundValue" />

@code {
    ...

    private string BoundValue
    {
        get => ChildMessage ?? string.Empty;
        set => ChildMessageChanged.InvokeAsync(value);
    }
}

No .NET 7, você pode usar os modificadores new @bind:get and @bind:set para dar suporte à associação de dados bidirecional e simplificar a sintaxe de associação:

<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage" 
    @bind-GrandchildMessage:set="ChildMessageChanged" />

Para obter mais informações, consulte o seguinte conteúdo no artigo Associação de dados :

Migrar a interoperabilidade JavaScript sem marshaling

A interoperabilidade com unmarshaling usando a interface IJSUnmarshalledRuntime é obsoleta e deve ser substituída pela interoperabilidade [JSImport]/[JSExport] JavaScript.

Para mais informações, confira Interoperabilidade de JSImport/JSExport de JavaScript com o ASP.NET Core Blazor.

A autenticação de Blazor WebAssembly usa o estado de histórico para redirecionamentos

O suporte à autenticação em aplicativos Blazor WebAssembly foi alterada para contar com o estado do histórico de navegação em vez de cadeias de caracteres de consulta na URL. Como resultado, passar a URL de retorno por meio da cadeia de caracteres de consulta falhará ao redirecionar de volta para a página original após um logon no .NET 7.

O exemplo a seguir demonstra a abordagem de redirecionamento anterior para aplicativos direcionados ao .NET 6 ou anterior em RedirectToLogin.razor, que se baseia em uma URL de redirecionamento (?returnUrl=) com NavigateTo:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

O exemplo a seguir demonstra a nova abordagem de redirecionamento para aplicativos direcionados ao .NET 7 ou posterior em RedirectToLogin.razor, que se baseia no estado do histórico de navegação comNavigateToLogin:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options

@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
    }
}

Como parte dessa alteração, SignOutSessionStateManager é obsoleto no .NET 7 ou posterior e substituído por NavigateToLogout.

O exemplo a seguir demonstra a abordagem anterior no Shared/LoginDisplay.razor de um aplicativo gerado a partir do modelo de projeto Blazor WebAssembly:

@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

O exemplo a seguir demonstra a nova abordagem Shared/LoginDisplay.razor em que chama NavigateToLogout. A injeção (@inject) do SignOutSessionStateManager é removida das diretivas do componente sobre o arquivo e o método BeginLogOut é atualizado para o seguinte código:

@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

O registro do serviço SignOutSessionStateManager é removido no Program.cs:

- builder.Services.AddScoped<SignOutSessionStateManager>();

Para saber mais, consulte os recursos a seguir:

Ferramentas de build do .NET WebAssembly para projetos do .NET 6

Agora você pode usar as ferramentas de compilação do .NET WebAssembly com um projeto do .NET 6 ao trabalhar com o SDK do .NET 7. A nova carga de trabalho wasm-tools-net6 inclui as ferramentas de compilação do .NET WebAssembly para projetos do .NET 6 para que possam ser usadas com o SDK do .NET 7. A carga de trabalho existente wasm-tools instala as ferramentas de compilação do .NET WebAssembly para projetos do .NET 7. No entanto, a versão do .NET 7 das ferramentas de compilação é incompatível com projetos existentes criados com o .NET 6. Os projetos que usam as ferramentas de compilação que devem dar suporte ao .NET 6 e ao .NET 7 devem usar vários direcionamentos.

Atualizar imagens do Docker

Para aplicativos que usam o Docker, atualize suas instruções e scripts do Dockerfile FROM. Use uma imagem base que inclua o runtime do ASP.NET Core 7.0. Considere a seguinte diferença de comando do docker pull entre o ASP.NET Core 6.0 e o 7.0:

- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0

Analisar as alterações interruptivas

Para alterações interruptivas do .NET Core 6.0 para o .NET 7.0, confira Alterações interruptivas no .NET 7. ASP.NET Core e o Entity Framework Core estão incluídos na lista.