Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como atualizar um projeto existente do ASP.NET Core no .NET 6 para o .NET 7.
Pré-requisitos
Visual Studio 2022 com a carga de trabalho de desenvolvimento Web e do ASP.NET.
Atualizar a versão do SDK do .NET Core 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 da versão 7.0 para aplicativos Blazor, recomendamos o seguinte processo:
- Crie um novo projeto Blazor 7.0 a partir 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 Blazor anteriores, a vinculação entre vários componentes exigia vincular-se a propriedades com acessadores get/set.
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 conteúdo a seguir no artigo Vinculaçã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 alterado para passar a depender do estado do histórico de navegação em vez de usar strings 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 destinados ao .NET 7 ou posterior em RedirectToLogin.razor, que se baseia em estado do histórico de navegação com NavigateToLogin:
@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 em Shared/LoginDisplay.razor, que chama NavigateToLogout. A injeção (@inject) do SignOutSessionStateManager é removida das diretivas do componente no topo do 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 foi removido em Program.cs:
- builder.Services.AddScoped<SignOutSessionStateManager>();
Para obter mais informações, consulte os seguintes recursos:
- [Alteração interruptiva]: atualizações na autenticação em aplicativos webassembly
- navegação do ASP.NET Core Blazor
- Proteja o ASP.NET Core Blazor WebAssembly
- Autenticação e autorização no Blazor ASP.NET Core
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 para .NET 7 das ferramentas de compilação do .NET WebAssembly é incompatível com projetos existentes compilados com o .NET 6. Os projetos que usam as ferramentas de compilação do .NET WebAssembly que precisam dar suporte ao .NET 6 e ao .NET 7 devem utilizar a compilação para múltiplos destinos.
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 de quebra
Use os artigos em Mudanças de ruptura no .NET para encontrar mudanças de ruptura que podem se aplicar ao atualizar um aplicativo para uma versão mais recente do .NET.