Compartilhar via


Migrar do ASP.NET Core no .NET 6 para o .NET 7

Este artigo explica como atualizar um projeto existente do ASP.NET Core no .NET 6 para o .NET 7.

Pré-requisitos

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

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

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

Atualizar a estrutura de destino

Atualize o TFM (Target Framework Moniker) 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 neste artigo para atualizar um aplicativo para o .NET 7, adote recursos específicos seguindo os links no What's new no ASP.NET Core no .NET 7.

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.

Em versões do .NET 6 ou 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 obter mais informações, consulte 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 em que chama Shared/LoginDisplay.razor. 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 obter mais informações, consulte os seguintes recursos:

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 DockerfileFROM. Use uma imagem base que inclua o ASP.NET Core no runtime do .NET 7. Considere a seguinte docker pull diferença de comando entre ASP.NET Core no .NET 6 e no .NET 7:

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

Alterações da falha

Use os artigos sobre alterações interruptivas no .NET para encontrar alterações significativas que podem se aplicar ao atualizar um aplicativo para uma versão mais recente do .NET.