Alterações de runtime para a migração do .NET Framework 4.8 para o 4.8.x

Esse artigo lista os problemas de compatibilidade do aplicativo que foram introduzidos no .NET Framework 4.8 e 4.8.1.

.NET Framework 4.8

ASP.NET

ASP.NET Corrigir a manipulação de InputAttributes e LabelAttributes para controle CheckBox de WebForms

Detalhes

Para aplicativos que direcionam o .NET Framework 4.7.2 e versões anteriores, CheckBox.InputAttributes e CheckBox.LabelAttributes programaticamente adicionados a um controle CheckBox de WebForms são perdidos após o postback. Para aplicativos que direcionam o .NET Framework 4.8 ou versões posteriores, eles são preservados após o postback.

Sugestão

Para o comportamento correto para restaurar atributos em postback, defina targetFrameworkVersion como 4.8 ou superior. Por exemplo:

<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>

Defini-la como mais baixa ou não definir preserva o comportamento antigo incorreto.

Nome Valor
Escopo Unknown
Versão 4.8
Tipo Runtime

APIs afetadas

ASP.NET A manipulação incorreta com várias partes pode resultar na perda dos dados de formulário.

Detalhes

Em aplicativos direcionados ao .NET Framework 4.7.2 e versões anteriores, o ASP.NET pode analisar incorretamente valores de limite de várias partes, resultando na indisponibilidade dos dados do formulário durante a execução da solicitação. Os aplicativos que direcionam o .NET Framework 4.8 ou versões posteriores analisam corretamente os dados com várias partes para que os valores de formulário estejam disponíveis durante a execução da solicitação.

Sugestão

Começando com aplicativos em execução no .NET Framework 4.8, ao direcionar o .NET Framework 4.8 ou posterior usando o elemento targetFrameworkVersion, o comportamento padrão é alterado para retirar os delimitadores. Ao direcionar versões anteriores da estrutura ou não usar targetFrameworkVersion, delimitadores à direita para alguns valores ainda são retornados.

Esse comportamento também pode ser controlado explicitamente com umappSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Nome Valor
Escopo Unknown
Versão 4.8
Tipo Runtime

APIs afetadas

ASP.NET ValidationContext.MemberName não é NULL ao usar o DataAnnotations.ValidationAttribute personalizado

Detalhes

No .NET Framework 4.7.2 e versões anteriores, ao usar um System.ComponentModel.DataAnnotations.ValidationAttribute personalizado, a propriedade ValidationContext.MemberName retorna null. Na versão do .NET Framework 4.8 anterior à atualização de outubro de 2019, ele retorna o nome do membro. A partir do .NET Framework de outubro de 2019 Preview of Quality Rollup para .NET Framework 4.8, ele retorna null por padrão, mas você pode optar por retornar o nome do membro.

Sugestão

Adicione a seguinte configuração ao seu arquivo web.config para a propriedade retornar o nome do membro na versão prévia do Quality Rollup lançada em outubro de 2019 para o .NET Framework 4.8 e versões posteriores:

<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName"  value="true"/>
...
</appSettings>
</configuration>

Na versão do .NET Framework 4.8 anterior à atualização de outubro de 2019, adicionar isso ao seu arquivo web.config restaura o comportamento anterior e a propriedade retorna null.

Nome Valor
Escopo Unknown
Versão 4.8
Tipo Runtime

APIs afetadas

Núcleo

O .NET COM realiza marshaling bem-sucedido de parâmetros ByRef SafeArray em eventos

Detalhes

No .NET Framework 4.7.2 e versões anteriores, um parâmetro ByRef SafeArray em um evento COM falharia ao retornar ao código nativo. Com essa alteração, o SafeArray agora é realizado com êxito.

  • [x] Quirked

Sugestão

Se a realização de marshal dos parâmetros ByRef SafeArray corretamente em eventos COM interromper a execução, será possível desabilitar esse código adicionando a seguinte opção de configuração à sua configuração de aplicativo:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nome Valor
Escopo Secundária
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

A Interoperabilidade do .NET agora fará QueryInterface para IAgileObject (uma interface do WinRT)

Detalhes

Ao usar um evento WinRT com um delegado .NET, o Windows fará o QI para IAgileObject começando com o .NET Framework 4.8. Nas versões anteriores do .NET Framework, o tempo de execução falharia nesse QI e o evento não poderia ser inscrito.

  • [x] Quirked

Sugestão

Se a habilitação de QI para IAgileObject interromper a execução, você poderá desabilitar esse código definindo a configuração a seguir.

Método 1: variável de ambiente

Defina a seguinte variável de ambiente: COMPLUS_DisableCCWSupportIAgileObject=1

Esse método afeta qualquer ambiente que herde essa variável de ambiente. Isso pode ser apenas uma única sessão de console ou pode afetar a máquina inteira se você definir a variável de ambiente globalmente. O nome da variável de ambiente não diferencia maiúsculas de minúsculas.

Método 2: Registro

Usando o Editor do Registro (regedit.exe), localize uma das seguintes subchaves:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework

Em seguida, adicione a seguinte entrada:

Nome: DisableCCWSupportIAgileObject Tipo: valor DWORD (32 bits) (também chamado REG_DWORD) Dados: 1

Você pode usar a ferramenta REG.EXE do Windows para adicionar esse valor de uma linha de comando ou ambiente de script. Por exemplo:

reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1

Nesse caso, HKLM é usado em vez de HKEY_LOCAL_MACHINE. Use reg add /? para ver a ajuda sobre esta sintaxe. O nome do valor do registro não diferencia maiúsculas de minúsculas.

Nome Valor
Escopo Microsoft Edge
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Windows Communication Foundation (WCF)

Alteração de alto contraste de ComboBox de svcTraceViewer

Detalhes

Na ferramenta Visualizador de Rastreamento de Serviço da Microsoft, os controles ComboBox não eram exibidos na cor correta em determinados temas de alto contraste. O problema foi corrigido no .NET Framework 4.7.2. No entanto, devido aos requisitos de compatibilidade com versões anteriores do SDK do .NET Framework, a correção não estava visível para clientes por padrão. O .NET 4.8 revela essa alteração adicionando os seguintes comutadores de configuração do AppContext ao arquivo svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />

Sugestão

Se você não quiser alterar o comportamento de alto contraste, poderá desativá-lo removendo a seção a seguir do arquivo svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nome Valor
Escopo Microsoft Edge
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Windows Presentation Foundation (WPF)

Melhoria de Associação de Dados para KeyedCollection

Detalhes

Corrigido o uso incorreto de Binding do indexador IList quando o objeto de origem declara um indexador personalizado com a mesma assinatura (por exemplo, KeyedCollection<int,TItem>).

Sugestão

Para que um aplicativo destinado a uma versão mais antiga se beneficie dessa alteração, ele deve ser executado no .NET Framework 4.8 ou posterior e deve aceitar a alteração adicionando a seguinte opção AppContext à <runtime>seção do arquivo de configuração do aplicativo e configurando parafalse:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.Data.Binding.IListIndexerHidesCustomIndexer=false" />
</runtime>
</configuration>
Nome Valor
Escopo Principal
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Corrigido um problema quando ListBox para de responder se contiver tipos de valor duplicados

Detalhes

Corrigido um problema em que uma virtualização ItemsControlpode parar de responder durante a rolagem quando sua Itemscoleção contém objetos de tipo de valor duplicados.

Nome Valor
Escopo Principal
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Melhorias no algoritmo de alocação de espaço de linhas de estrela da grade

Detalhes

Correção de um bug no algoritmo para alocar tamanhos) em um Grid introduzido no .NET Framework 4.7. Em alguns casos, como uma grade com Height=&quot;Auto&quot; contendo linhas vazias, as linhas foram organizadas na posição incorreta, possivelmente fora da grade.

Sugestão

Para que o aplicativo se beneficie dessas alterações, ele deve ser executado no .NET Framework 4.8 ou posterior.

Nome Valor
Escopo Principal
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Detalhes

Correção do resultado incorreto de pressionar uma tecla de direção quando o foco está em um hiperlink dentro de um item que não é o item selecionado do ItemsControl pai.

Nome Valor
Escopo Principal
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

Melhoria de desempenho na árvore de automação para agrupar ItemsControls

Detalhes

Melhoria do desempenho de recompilação da árvore de automação de um ItemsControl, como um ListBox ou DataGrid, no qual o agrupamento está habilitado.

Nome Valor
Escopo Principal
Versão 4.8
Tipo Runtime

APIs afetadas

Não detectáveis com a análise de API.

.NET Framework 4.8.1

Nenhum problema de compatibilidade de aplicativo foi introduzido no .NET Framework 4.8.1.