Migrar do ASP.NET Core 3.1 para o 5.0
Este artigo explica como atualizar um projeto ASP.NET Core 3.1 existente para ASP.NET Core 5.0. Para obter instruções sobre como migrar do ASP.NET Core 3.1 para o ASP.NET Core 6.0, consulte Migrar de ASP.NET Core 3.1 para 6.0.
Pré-requisitos
- Visual Studio 2019 16.8 ou posterior com a carga de trabalho de desenvolvimento da Web e do ASP.NET
- SDK do .NET 5.0
Atualizar a versão do SDK do .NET Core no global.json
Se você depender de um global.json arquivo para direcionar uma versão específica do SDK do .NET Core, atualize a version
propriedade para a versão do SDK do .NET 5.0 instalada. Por exemplo:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Atualizar a estrutura de destino
Se estiver atualizando um Blazor WebAssembly projeto, pule para a seção Atualizar Blazor WebAssembly projetos . Para qualquer outro tipo de projeto ASP.NET Core, atualize o TFM (Target Framework Moniker) do arquivo de projeto para net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Excluir bin
e obj
pastas
Talvez seja necessário excluir as bin
pastas e obj
. Execute dotnet nuget locals --clear all
para limpar o cache do pacote NuGet.
Alterações na Blazor lógica de roteamento de aplicativos na versão 5.0.1 e outras 5.x até 6.0
A computação da precedência de rota foi alterada na versão de patch do ASP.NET Core 5.0.1. Isso poderá afetar você se você tiver definido rotas ou rotas catch-all com parâmetros opcionais.
Comportamento antigo
Com o comportamento anterior em ASP.NET Core 5.0.0 ou anterior, rotas com precedência inferior, como {*slug}
, são correspondidas antes de rotas com precedência mais alta, como /customer/{id}
.
Novo comportamento
O novo comportamento no ASP.NET Core 5.0.1 ou posterior corresponde mais de perto ao comportamento de roteamento definido em aplicativos ASP.NET Core, em que a estrutura calcula e estabelece a precedência de rota para cada segmento primeiro e usa apenas o comprimento da rota para quebrar laços como critérios secundários.
Motivo da alteração
O comportamento original é considerado um bug na implementação porque nossa meta é que o Blazor sistema de roteamento se comporte da mesma maneira que o sistema de roteamento ASP.NET Core para o subconjunto de recursos com suporte pelo Blazor roteamento.
Ação recomendada
Adicione o PreferExactMatches
atributo ao Router
componente no App.razor
arquivo para aceitar o comportamento correto:
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
Quando PreferExactMatches
está definido como @true
, a correspondência de rotas prefere correspondências exatas em vez de caracteres curinga.
Importante
Todos os aplicativos devem definir PreferExactMatches
explicitamente como @true
.
A capacidade de defini-la PreferExactMatches
@false
como ou deixá-la não definida só é fornecida para compatibilidade com versões anteriores.
Quando o .NET 6 for lançado, o roteador sempre preferirá correspondências exatas e a opção PreferExactMatches
não estará disponível.
Atualizar Blazor WebAssembly e Blazor Server projetos
As diretrizes nesta seção se aplicam a ambos os Blazor modelos de hospedagem. As seções que seguem esta seção fornecem diretrizes adicionais específicas para modelos de hospedagem e tipos de aplicativos. Aplique as diretrizes de todas as seções relevantes ao seu aplicativo.
Em
wwwroot/index.html
um Blazor WebAssembly aplicativo ou dePages/_Host.cshtml
um Blazor Server aplicativo, adicione um<link>
elemento ao<head>
elemento para estilos. Nos valores de atributo do elemento a seguir<link>
, o espaço reservado{ASSEMBLY NAME}
é o nome do assembly dohref
aplicativo.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Autônomo Blazor WebAssembly ou Blazor Server exemplo:
+<link href="BlazorSample.styles.css" rel="stylesheet" />
Client
projeto de um exemplo de solução hospedada Blazor WebAssembly :+<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
Inclua um novo namespace no arquivo do aplicativo para virtualização de
_Imports.razor
componentes, Microsoft.AspNetCore.Components.Web.Virtualization. Os arquivos a seguir_Imports.razor
mostram os namespaces padrão em aplicativos gerados a partir dos Blazor modelos de projeto. O espaço reservado{ASSEMBLY NAME}
é o nome do assembly do aplicativo.Blazor WebAssembly (
_Imports.razor
):@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
Blazor Server (
_Imports.razor
):@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using {ASSEMBLY NAME} @using {ASSEMBLY NAME}.Shared
MainLayout
No componente (Shared/MainLayout.razor
), envolva a marcação HTML do componente com um<div>
elemento que tem umclass
atributo definido comopage
:<div class="page"> ... </div>
Adicione os seguintes arquivos à
Shared
pasta :MainLayout.razor.css
:.page { position: relative; display: flex; flex-direction: column; } .main { flex: 1; } .sidebar { background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); } .top-row { background-color: #f7f7f7; border-bottom: 1px solid #d6d5d5; justify-content: flex-end; height: 3.5rem; display: flex; align-items: center; } .top-row ::deep a, .top-row .btn-link { white-space: nowrap; margin-left: 1.5rem; } .top-row a:first-child { overflow: hidden; text-overflow: ellipsis; } @media (max-width: 767.98px) { .top-row:not(.auth) { display: none; } .top-row.auth { justify-content: space-between; } .top-row a, .top-row .btn-link { margin-left: 0; } } @media (min-width: 768px) { .page { flex-direction: row; } .sidebar { width: 250px; height: 100vh; position: sticky; top: 0; } .top-row { position: sticky; top: 0; z-index: 1; } .main > div { padding-left: 2rem !important; padding-right: 1.5rem !important; } }
NavMenu.razor.css
:.navbar-toggler { background-color: rgba(255, 255, 255, 0.1); } .top-row { height: 3.5rem; background-color: rgba(0,0,0,0.4); } .navbar-brand { font-size: 1.1rem; } .oi { width: 2rem; font-size: 1.1rem; vertical-align: text-top; top: -2px; } .nav-item { font-size: 0.9rem; padding-bottom: 0.5rem; } .nav-item:first-of-type { padding-top: 1rem; } .nav-item:last-of-type { padding-bottom: 1rem; } .nav-item ::deep a { color: #d7d7d7; border-radius: 4px; height: 3rem; display: flex; align-items: center; line-height: 3rem; } .nav-item ::deep a.active { background-color: rgba(255,255,255,0.25); color: white; } .nav-item ::deep a:hover { background-color: rgba(255,255,255,0.1); color: white; } @media (min-width: 768px) { .navbar-toggler { display: none; } .collapse { /* Never collapse the sidebar for wide screens */ display: block; } }
O arquivo base
wwwroot/css/app.css
mais recente de um Blazor WebAssembly aplicativo ouwwwroot/css/site.css
arquivo de um Blazor Server aplicativo inclui os estilos a seguir. Remova estilos extras deixando os estilos a seguir e qualquer um que você tenha adicionado ao aplicativo.A folha de estilos a seguir inclui apenas estilos base e não inclui estilos personalizados adicionados pelo desenvolvedor:
@import url('open-iconic/font/css/open-iconic-bootstrap.css'); html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } a, .btn-link { color: #0366d6; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .content { padding-top: 1.1rem; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid red; } .validation-message { color: red; } #blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); display: none; left: 0; padding: 0.6rem 1.25rem 0.7rem 1.25rem; position: fixed; width: 100%; z-index: 1000; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; }
Atualizar projetos Blazor WebAssembly
Siga as diretrizes na seção Atualização Blazor WebAssembly e Blazor Server projetos anteriores .
Para um Blazor WebAssembly projeto, incluindo o Client
projeto de uma solução hospedada Blazor , aplique as seguintes alterações ao arquivo de projeto:
Atualize o SDK de
Microsoft.NET.Sdk.Web
paraMicrosoft.NET.Sdk.BlazorWebAssembly
:- <Project Sdk="Microsoft.NET.Sdk.Web"> + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
Observação
Essa atualização só se aplica a projetos autônomos Blazor WebAssembly e aos
Client
projetos de soluções hospedadas Blazor .Atualize as seguintes propriedades:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> - <TargetFramework>netstandard2.1</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net5.0</TargetFramework> </PropertyGroup>
Remova a referência de pacote para Microsoft.AspNetCore.Components.WebAssembly.Build:
<ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
Atualize outros pacotes para suas versões mais recentes. As versões mais recentes podem ser encontradas em NuGet.org.
No
wwwroot/index.html
, altere o elemento que carrega oApp
componente para um<div>
elemento com umid
definido comoapp
:-<app>Loading...</app> +<div id="app">Loading...</div>
Em
Program.Main
(Program.cs
), altere a referência ao<app>
elemento para um seletor CSS adicionando um hash#
a ele:-builder.RootComponents.Add<App>("app"); +builder.RootComponents.Add<App>("#app");
Em
Program.Main
(Program.cs
), altere um registro transitórioHttpClient
padrão para com escopo, se presente:-builder.Services.AddTransient(sp => new HttpClient - { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddScoped(sp => new HttpClient + { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
No
Program.Main
(Program.cs
) doClient
aplicativo de soluções hospedadas Blazor :- Opcionalmente, substitua
builder.HostEnvironment.BaseAddress
por endereços base do cliente de cadeia de caracteres. - Altere todos os registros de fábrica de clientes transitórios nomeados para com escopo.
-builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", - client => client.BaseAddress = new Uri("https://localhost:5001")) - .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>() - .CreateClient("{APP NAMESPACE}.ServerAPI")); +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", + client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)) + .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>(); +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>() + .CreateClient("{APP NAMESPACE}.ServerAPI"));
No código anterior, o
{APP NAMESPACE}
espaço reservado é o namespace do aplicativo.- Opcionalmente, substitua
Aplicativo autônomo Blazor WebAssembly com contas da Microsoft
Siga as diretrizes nas seções Atualizar Blazor WebAssembly e projetos e Blazor ServerAtualizar Blazor WebAssembly projetos anteriores.
Para um aplicativo autônomo Blazor WebAssembly registrado no portal do Azure usar o AAD (Azure Active Directory) para contas da Microsoft:
O aplicativo requer os
openid
escopos eoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Na folha portal do Azure registro do aplicativo Autenticação:
- Remova a configuração da plataforma Web .
- Adicione uma configuração de plataforma de aplicativo de página única com o URI de redirecionamento do aplicativo.
- Desabilite a concessão implícita para tokens de acesso e tokens de ID.
Para obter mais informações, consulte Proteger um aplicativo autônomo ASP.NET Core Blazor WebAssembly com contas da Microsoft.
Aplicativo autônomo Blazor WebAssembly com o AAD (Azure Active Directory)
Siga as diretrizes nas seções Atualizar Blazor WebAssembly e projetos e Blazor ServerAtualizar Blazor WebAssembly projetos anteriores.
Para um aplicativo autônomo Blazor WebAssembly registrado no portal do Azure usar o AAD (Azure Active Directory):
O aplicativo requer o
https://graph.microsoft.com/User.Read
escopo:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Na folha portal do Azure registro do aplicativo Autenticação:
- Remova a configuração da plataforma Web .
- Adicione uma configuração de plataforma de aplicativo de página única com o URI de redirecionamento do aplicativo.
- Desabilite a concessão implícita para tokens de acesso e tokens de ID.
Para obter mais informações, consulte Proteger um aplicativo autônomo ASP.NET Core Blazor WebAssembly com o Azure Active Directory.
Aplicativo autônomo Blazor WebAssembly com AAD (Azure Active Directory) B2C
Siga as diretrizes nas seções Atualizar Blazor WebAssembly e projetos e Blazor ServerAtualizar Blazor WebAssembly projetos anteriores.
Para um aplicativo autônomo Blazor WebAssembly registrado no portal do Azure usar o AAD (Azure Active Directory) B2C:
O aplicativo requer os
openid
escopos eoffline_access
:options.ProviderOptions.DefaultAccessTokenScopes.Add("openid"); options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
Na folha portal do Azure registro de aplicativo Autenticação:
- Remova a configuração da plataforma Web .
- Adicione uma configuração de plataforma de aplicativo de página única com o URI de redirecionamento do aplicativo.
- Desabilite a concessão implícita para tokens de acesso e tokens de ID.
Para obter mais informações, consulte Proteger um aplicativo autônomo ASP.NET Core Blazor WebAssembly com o Azure Active Directory B2C.
Aplicativo hospedado Blazor WebAssembly com AAD (Azure Active Directory) ou AAD B2C
Siga as diretrizes nas seções Atualizar Blazor WebAssembly e projetos e Blazor ServerAtualizar Blazor WebAssembly projetos anteriores.
O Client
registro de aplicativo de uma solução hospedada Blazor que usa o AAD ou o AAD B2C para autenticação de usuário deve usar uma configuração de plataforma de aplicativo de página única dos Aplicativos do Azure.
Na folha portal do Azure Client
registro de aplicativo Autenticação:
- Remova a configuração da plataforma Web .
- Adicione uma configuração de plataforma de aplicativo de página única com o URI de redirecionamento do aplicativo.
- Desabilite a concessão implícita para tokens de acesso e tokens de ID.
Para obter mais informações, consulte:
- Proteger um aplicativo de ASP.NET Core Blazor WebAssembly hospedado com o Azure Active Directory
- Proteger um aplicativo de ASP.NET Core Blazor WebAssembly hospedado com o Azure Active Directory B2C
Atualizar o projeto de servidor de uma solução hospedada Blazor
Siga as diretrizes nas seções anteriores:
- Atualizar Blazor WebAssembly e Blazor Server projetos
- Atualizar Blazor WebAssembly projetos
- A seção que se aplica ao provedor do aplicativo com o Azure Active Directory:
Atualize o Server
projeto de uma solução hospedada Blazor como um aplicativo ASP.NET Core seguindo as diretrizes gerais neste artigo.
Além disso, Server
projetos que autenticam usuários em aplicativos cliente Blazor WebAssembly com o AAD (Azure Active Directory) ou B2C devem adotar novos pacotes da Microsoft Identity v2.0:
Para o AAD:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Para o AAD B2C:
-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />
Para as referências de pacote anteriores, determine as versões do pacote para os {VERSION}
espaços reservados em NuGet.org:
Observação
O SDK do Server
projeto em uma solução hospedada Blazor WebAssembly permanece Microsoft.NET.Sdk.Web
:
<Project Sdk="Microsoft.NET.Sdk.Web">
Para obter mais informações, consulte:
- Proteger um aplicativo de ASP.NET Core Blazor WebAssembly hospedado com o Azure Active Directory
- Proteger um aplicativo de ASP.NET Core Blazor WebAssembly hospedado com o Azure Active Directory B2C
Limpar e recompilar a solução
Depois de migrar o aplicativo ou a solução para o .NET 5, limpe e recompile o aplicativo ou a solução. Se houver incompatibilidades de pacote entre novas referências de pacote e pacotes armazenados em cache:
Limpe os caches de pacote NuGet executando o seguinte
dotnet nuget locals
comando em um shell de comando:dotnet nuget locals --clear all
Limpe e recompile o aplicativo ou a solução.
Solucionar problemas
Siga as diretrizes de Solução de problemas no final do Blazor WebAssembly tópico de segurança que se aplica ao seu aplicativo:
Aplicativos Blazor WebAssembly autônomos:
- Diretrizes gerais para provedores de OIDC e a Biblioteca de Autenticação WebAssembly
- Contas Microsoft
- AAD (Azure Active Directory)
- Azure Active Directory (AAD) B2C
Aplicativos Blazor WebAssembly hospedados:
Cliente não autorizado do AAD (Azure Active Directory)
Depois de atualizar um Blazor WebAssembly aplicativo que usa o AAD para autenticação, você poderá receber o seguinte erro no retorno de chamada de logon para o aplicativo depois que o usuário entrar com o AAD:
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Falha na autorização. Esses requisitos não foram atendidos: DenyAnonymousAuthorizationRequirement: requer um usuário autenticado.
Erro de retorno de chamada de logon do AAD:
- Erro:
unauthorized_client
- Descrição:
AADB2C90058: The provided application is not configured to allow public clients.
Para resolver o erro:
- No portal do Azure, acesse o manifesto do aplicativo.
- Defina o
allowPublicClient
atributo comonull
outrue
.
Atualizar um Blazor PWA (Aplicativo Web Progressivo)
Adicione o seguinte item ao arquivo de projeto do aplicativo PWA:
<ItemGroup>
<ServiceWorker Include="wwwroot\service-worker.js"
PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>
Remover o link da folha de estilos de isolamento do CSS de visualização
Se o do projeto wwwroot/index.html
(Blazor WebAssembly) ou Pages/_Host.cshtml
(Blazor Server) contiver um elemento stylesheet <link>
para scoped.styles.css
de uma versão prévia anterior do 5.0, remova a <link>
marca:
-<link href="_framework/scoped.styles.css/" rel="stylesheet" />
Atualizar Razor RCLs (bibliotecas de classes)
Migre Razor RCLs (bibliotecas de classes) para aproveitar novas APIs ou recursos introduzidos como parte do ASP.NET Core 5.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>net5.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>net5.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Referências do pacote de atualização
No arquivo de projeto, atualize cada atributo do Version
pacote Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*e System.Net.Http.Json para 5.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="5.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
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 runtime do ASP.NET Core 5.0. Considere a seguinte docker pull
diferença de comando entre ASP.NET Core 3.1 e 5.0:
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.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 dotnet/dotnet-docker#1939.
Alterações de model binding no ASP.NET Core MVC e Razor pages
Os valores datetime são associados ao modelo como horários UTC
No ASP.NET Core 3.1 e anteriores, DateTime
os valores eram associados ao modelo como hora local, onde o fuso horário era determinado pelo servidor. DateTime
os valores associados à formatação de entrada (JSON) e DateTimeOffset
os valores foram associados como fusos horários UTC.
No ASP.NET Core 5.0 e posterior, a associação de modelo associa DateTime
valores 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 substitua 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 ModelBinderProviders
coleção 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();
}
Saiba mais neste tópico do GitHub.
ANCM (Módulo ASP.NET Core)
Se o ANCM (Módulo ASP.NET Core) 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 mais recente (download direto) e execute o instalador. Para obter mais informações, consulte Pacote de hospedagem.
Alterações de referência de pacote que afetam alguns pacotes NuGet
Com a migração de alguns Microsoft.Extensions.*
pacotes NuGet do repositório dotnet/extensions para dotnet/runtime, conforme descrito em Migrando conteúdo dotnet/extensions para dotnet/runtime e dotnet/aspnetcore (aspnet/Announcements #411),as alterações de empacotamento estão sendo aplicadas a alguns dos pacotes migrados. Essas alterações geralmente resultam em alterações de namespace para a API do .NET.
Para pesquisar ainda mais as APIs para alterações no namespace do aplicativo ao migrar para o 5.0, use o navegador de API do .NET.
Migrar a Microsoft.Identity. Web
As páginas wiki a seguir explicam como migrar a Microsoft.Identity. Web de ASP.NET Core 3.1 a 5.0:
Os tutoriais a seguir também explicam a migração:
- Um ASP.NET Core usuários de entrada de aplicativo Web com o plataforma de identidade da Microsoft em sua organização. Consulte Opção 2: criar o exemplo na linha de comando.
- Conectar um usuário com a Microsoft Identity Plataforma em um aplicativo da Área de Trabalho do WPF e chame uma API Web ASP.NET Core. Confira Como o código foi criado.
Examinar alterações interruptivas
Para alterações interruptivas do .NET Core 3.1 para o .NET 5.0, consulte Alterações interruptivas para migração da versão 3.1 para a 5.0. ASP.NET Core e o Entity Framework Core também estão incluídos na lista.