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 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:
- [Alteração interruptiva]: atualizações na Autenticação em aplicativos webassembly
- navegação do ASP.NET Core Blazor
- Blazor WebAssembly do ASP.NET Core Seguro
- 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 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.