Migrar do ASP.NET Core 3.1 para 6.0
Esse artigo explica como atualizar um projeto existente do ASP.NET Core 3.1 para o ASP.NET Core 6.0. Para atualizar do ASP.NET Core 5.0 para o 6.0, consulte Migrar do ASP.NET Core 5.0 para o 6.0.
Pré-requisitos
- Visual Studio 2022 com a carga de trabalho do ASP.NET e desenvolvimento Web.
- SDK do .NET 6.0
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 6.0 instalada. Por exemplo:
{
"sdk": {
- "version": "3.1.200"
+ "version": "6.0.100"
}
}
Atualizar a estrutura de destino
Atualize o TFM (Moniker da Estrutura de Destino) do arquivo de projeto para net6.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
Referências do pacote de atualização
No arquivo de projeto, atualize cada atributo de referência Microsoft.AspNetCore.*
, Microsoft.EntityFrameworkCore.*
, Microsoft.Extensions.*
e System.Net.Http.Json
do pacote Version
para 6.0.0 ou posterior. Por exemplo:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
- <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>
Exclua as pastas bin
e obj
Talvez seja necessário excluir as pastas bin
e obj
. Execute dotnet nuget locals --clear all
para limpar o cache do pacote NuGet.
Modelo de hospedagem mínimo
Os modelos ASP.NET Core geram código usando o novo modelo de hospedagem mínima. O modelo de hospedagem mínimo unifica Startup.cs
e Program.cs
em um único arquivo Program.cs
. ConfigureServices
e Configure
não são mais usados. Os aplicativos que migram do ASP.NET Core 3.1 para o 6.0 não precisam usar o modelo de hospedagem mínimo. Usar Startup
e o Host Genérico usado pelos modelos do ASP.NET Core 3.1 é totalmente compatível.
Para usar Startup
com o novo modelo de hospedagem mínima, consulte Usar a inicialização com o novo modelo de hospedagem mínima.
Para migrar para o novo modelo de hospedagem mínima usando o padrão a seguir usado pelos modelos do ASP.NET Core 6.0, consulte Exemplos de código migrados para o novo modelo de hospedagem mínimo no ASP.NET Core 6.0 e Migrar do ASP.NET Core 5.0 para o 6.0
Atualizar bibliotecas de classes Razor (RCLs)
Migre bibliotecas de classes Razor (RCLs) para aproveitar novas APIs ou recursos introduzidos como parte do ASP.NET Core 6.0.
Para atualizar uma RCL direcionada a componentes:
Atualize as seguintes propriedades no arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net6.0</TargetFramework> </PropertyGroup>
Atualize outros pacotes para suas versões mais recentes. As versões mais recentes podem ser encontradas em NuGet.org.
Para atualizar uma RCL direcionada ao MVC, atualize as seguintes propriedades no arquivo de projeto:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Blazor
Para adotar todos os novos recursos 5.0 e 6.0para aplicativos do Blazor, recomendamos o seguinte processo:
- Crie um novo projeto 6.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 6.0 fazendo modificações para adotar os novos recursos 5.0 e 6.0.
Atualizar imagens do Docker
Para aplicativos que usam Docker, atualize suas instruções e scripts Dockerfile FROM
. Use uma imagem base que inclua o runtime do ASP.NET Core 6.0. Considere a seguinte diferença de comando docker pull
entre o ASP.NET Core 3.1 e o 6.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Como parte da mudança para ".NET" como o nome do produto, as imagens do Docker foram movidas dos mcr.microsoft.com/dotnet/core
repositórios para mcr.microsoft.com/dotnet
. Para obter mais informações, consulte .NET 5.0 – Alteração de nome do repositório do Docker (dotnet/dotnet-docker #1939).
Alterações de associação de modelo no ASP.NET Core MVC e Páginas do Razor
Os valores DateTime
são associados ao modelo como horários UTC
No ASP.NET Core 3.1 e anteriores, os valores DateTime
eram associados ao modelo como hora local, onde o fuso horário era determinado pelo servidor. Os valores DateTime
associados à formatação de entrada (JSON) e os valores DateTimeOffset
também foram associados como fusos horários UTC.
No ASP.NET Core 5.0 e posterior, a associação de modelo associa valores DateTime
consistentemente ao fuso horário UTC.
Para manter o comportamento anterior, remova o DateTimeModelBinderProvider
em Startup.ConfigureServices
:
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider
\ ComplexObjectModelBinder
substituta ComplexTypeModelBinderProvider
\ ComplexTypeModelBinder
Para adicionar suporte para tipos de registro C# 9 de associação de modelo, o ComplexTypeModelBinderProvider é:
- Anotado como obsoleto.
- Não é mais registrado por padrão.
Os aplicativos que dependem da presença do ComplexTypeModelBinderProvider
na coleção ModelBinderProviders
precisam referenciar o novo provedor associador:
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage
obsoleto
Os modelos ASP.NET Core 3.1 que incluem uma opção para contas de usuário individuais geram uma chamada para UseDatabaseErrorPage. UseDatabaseErrorPage
agora está obsoleto e deve ser substituído por uma combinação de AddDatabaseDeveloperPageExceptionFilter
e UseMigrationsEndPoint
, conforme mostrado no código a seguir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
+ services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
+ app.UseMigrationsEndPoint();
- app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
Para obter mais informações, consulte DatabaseErrorPage middleware em obsolescência (dotnet/aspnetcore #24987).
Módulo do ASP.NET Core (ANCM)
Se o Módulo do ASP.NET Core (ANCM) não foi um componente selecionado quando o Visual Studio foi instalado ou se uma versão anterior do ANCM foi instalada no sistema, baixe o Instalador de Pacote de Hospedagem do .NET Core (download direto) mais recente e execute o instalador. Para obter mais informações, consulte Hospedagem.
Alteração do nome do aplicativo
No .NET 6, WebApplicationBuilder normaliza o caminho raiz do conteúdo para terminar com um DirectorySeparatorChar. A maioria dos aplicativos que migram de HostBuilder ou de WebHostBuilder não compartilham o mesmo nome de aplicativo porque não estão normalizados. Para obter mais informações, consulte SetApplicationName
Analisar as alterações interruptivas
Consulte os seguintes recursos:
- Identity: a versão padrão da interface do usuário do Bootstrap foi alterada
- Alterações interruptivas para migração da versão 3.1 para a 5.0. O ASP.NET Core e o Entity Framework Core também estão incluídos na lista.
- Alterações interruptivas para migração da versão 5.0 para a 6.0: inclui o ASP.NET Core e o Entity Framework Core.
- Repositório GitHub de comunicados (aspnet/Announcements, rótulo
6.0.0
): inclui informações interruptivas e não interruptivas. - Repositório GitHub de comunicados (aspnet/Announcements, rótulo
5.0.0
): inclui informações interruptivas e não interruptivas.