Migrar do ASP.NET Core 3.1 para 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 do ASP.NET Core 3.1 para o 6.0.
Pré-requisitos
- Visual Studio 2019 16.8 ou posterior com a carga de trabalho do ASP.NET e desenvolvimento Web
- SDK do .NET 5.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 5.0 que está instalada. Por exemplo:
{
"sdk": {
- "version": "3.1.200"
+ "version": "5.0.100"
}
}
Atualizar a estrutura de destino
Se estiver atualizando um Blazor WebAssembly projeto, vá para a seção Atualizar Blazor WebAssembly projetos. Para qualquer outro tipo de projeto ASP.NET Core, atualize o TFM (Moniker da Estrutura de Destino) do arquivo de projeto para net5.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
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.
Alterações na Blazor lógica de roteamento de aplicativos na versão 5.0.1 e outras versões 5.x até 6.0
O cálculo da precedência de rota foi alterado na versão de patch do ASP.NET Core 5.0.1. Isso poderá afetá-lo se você tiver definido rotas catch-all ou rotas com parâmetros opcionais.
Comportamento antigo
Com o comportamento anterior no ASP.NET Core 5.0.0 ou anterior, as rotas com precedência mais baixa, 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 vínculos como critério secundário.
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 atributo PreferExactMatches
ao componente Router
no arquivo App.razor
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 modelos de hospedagem Blazor. As seções a seguir nesta seção fornecem diretrizes adicionais específicas para hospedar modelos e tipos de aplicativo. Aplique as diretrizes de todas as seções relevantes ao seu aplicativo.
Em
wwwroot/index.html
de um Blazor WebAssembly aplicativo ou doPages/_Host.cshtml
de um Blazor Server aplicativo, adicione um<link>
elemento ao<head>
elemento para estilos. Nos valores de atributo de elemento a seguir<link>
, o espaço reservadohref
é o nome do assembly do{ASSEMBLY NAME}
aplicativo.+<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
Blazor WebAssembly Autônomo 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._Imports.razor
Os arquivos a seguir 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
), coloque a marcação HTML do componente com um<div>
elemento que tem umclass
atributo definido comopage
:<div class="page"> ... </div>
Adicione os seguintes arquivos à pasta
Shared
: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 ou arquivowwwroot/css/site.css
de um aplicativo Blazor Server 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:
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; }
Observação
O exemplo anterior não mostra a
@import
diretiva para ícones Open Iconic (open-iconic-bootstrap.css
), fornecida pelo modelo de projeto Blazor. Open Iconic foi abandonado por seus mantenedores.
Atualizar projetos Blazor WebAssembly
Siga as diretrizes na seção Atualização Blazor WebAssembly e Blazor Server projetos anteriores.
Para um projeto Blazor WebAssembly, incluindo o projeto Client
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 propriedades a seguir:
<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.
Em
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 de 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 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 (Microsoft Entra ID) para contas da Microsoft:
O aplicativo requer os escopos
openid
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 Web da plataforma.
- 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 Microsoft Entra ID (ME-ID)
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 para usar o Microsoft Entra ID (ME-ID):
O aplicativo requer o escopo
https://graph.microsoft.com/User.Read
:options.ProviderOptions.DefaultAccessTokenScopes .Add("https://graph.microsoft.com/User.Read");
Na folha portal do Azure registro de aplicativo Autenticação:
- Remova a configuração Web da plataforma.
- 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 do Microsoft Entra ID.
Aplicativo autônomo Blazor WebAssembly com o 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 escopos
openid
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 Web da plataforma.
- 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 Blazor WebAssembly ASP.NET Core com o Azure Active Directory B2C.
Aplicativo Blazor WebAssembly hospedado com o Microsoft Entra ID (ME-ID) ou AAD B2C
Siga as diretrizes nas seções Atualizar Blazor WebAssembly e projetos e Blazor ServerAtualizar Blazor WebAssembly projetos anteriores.
O registro de aplicativo Client
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 Web da plataforma.
- 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 saber mais, veja:
- Proteger um aplicativo ASP.NET Core Blazor WebAssembly hospedado com o Microsoft Entra ID
- Proteger um aplicativo 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:
- Atualização 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 Microsoft Entra (ME-ID) 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 saber mais, veja:
- Proteger um aplicativo ASP.NET Core Blazor WebAssembly hospedado com o Microsoft Entra ID
- Proteger um aplicativo 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, limpo 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
- Microsoft Entra ID (ME-ID)
- Azure Active Directory (AAD) B2C
Aplicativos Blazor WebAssembly hospedados:
Cliente não autorizado para o Microsoft Entra ID (ME-ID)
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:
informação: falha na autorização do Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]. 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 atrituto
allowPublicClient
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 bibliotecas de classes Razor (RCLs)
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 pacote Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*e System.Net.Http.JsonVersion
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 Docker, atualize suas instruções e scripts Dockerfile FROM
. 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 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 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 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();
}
Saiba mais neste tópico do GitHub.
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ções na referência de pacotes que afetam alguns pacotes NuGet
Com a migração de alguns pacotes Microsoft.Extensions.*
NuGet do repositório dotnet/extensions para o dotnet/runtime, conforme descrito em Migrating dotnet/extensions content 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 aplicativo Web do ASP.NET Core que faz login de usuários com a plataforma identity da Microsoft em sua organização. Consulte Opção 2: criar o exemplo na linha de comando.
- Conecte um usuário com a plataforma Microsoft identity em um aplicativo da área de trabalho do WPF e chame uma API Web ASP.NET Core. Confira Como o código foi criado.
Analisar as 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. O ASP.NET Core e o Entity Framework Core também estão incluídos na lista.