Alterações de tempo de execução para migração para o .NET Framework 4.8.x

Este artigo lista os problemas de compatibilidade de aplicativos que foram introduzidos no .NET Framework 4.8 e 4.8.1.

.NET Framework 4.8

ASP.NET

ASP.NET Corrigir o tratamento de InputAttributes e LabelAttributes para o controle CheckBox de WebForms

Detalhes

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

Sugestão

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

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

Defini-lo mais baixo, ou não de todo, preserva o antigo comportamento incorreto.

Nome Valor
Âmbito Desconhecido
Versão 4.8
Type Runtime

APIs afetadas

ASP.NET O manuseio incorreto de várias partes pode resultar na perda de dados de formulário.

Detalhes

Em aplicativos destinados ao .NET Framework 4.7.2 e versões anteriores, ASP.NET podem analisar incorretamente valores de limite de várias partes, resultando em dados de formulário indisponíveis durante a execução da solicitação. Os aplicativos destinados ao .NET Framework 4.8 ou versões posteriores analisam corretamente os dados de 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 executados no .NET Framework 4.8, ao direcionar o .NET Framework 4.8 ou posterior usando o targetFrameworkVersion elemento , o comportamento padrão muda para delimitadores de faixa. Ao direcionar versões anteriores da estrutura ou não usar targetFrameworkVersiono , os delimitadores à direita para alguns valores ainda são retornados.

Esse comportamento também pode ser explicitamente controlado com um appSetting:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
Nome Valor
Âmbito Desconhecido
Versão 4.8
Type Runtime

APIs afetadas

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

Detalhes

No .NET Framework 4.7.2 e versões anteriores, ao usar um personalizado System.ComponentModel.DataAnnotations.ValidationAttribute, a ValidationContext.MemberName propriedade 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 October 2019 Preview of Quality Rollup for .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 que a propriedade retorne o nome do membro no .NET Framework outubro de 2019 Preview of Quality Rollup for .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 arquivo web.config restaura o comportamento anterior e a propriedade retorna null.

Nome Valor
Âmbito Desconhecido
Versão 4.8
Type Runtime

APIs afetadas

Principal

O .NET COM controla com êxito os 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 empacotar de volta para o código nativo. Com esta alteração, o SafeArray é agora organizado com êxito.

  • [ x ] Peculiar

Sugestão

Se a organização correta dos parâmetros ByRef SafeArray em Eventos COM interromper a execução, você poderá desabilitar esse código adicionando a seguinte opção de configuração à configuração do aplicativo:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
Nome Valor
Âmbito Menor
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

A interoperabilidade do .NET agora será QueryInterface for IAgileObject (uma interface WinRT)

Detalhes

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

  • [ x ] Peculiar

Sugestão

Se habilitar o QI para IAgileObject interrompe a execução, você pode desativar esse código definindo a seguinte configuração.

Método 1: Variável de ambiente

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

Esse método afeta qualquer ambiente que herda essa variável de ambiente. Isso pode ser apenas uma única sessão de console ou pode afetar toda a máquina 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: Registo

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 de REG_DWORD) Dados: 1

Você pode usar a ferramenta Windows REG.EXE 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

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

Nome Valor
Âmbito Edge
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

Windows Communication Foundation (WCF)

svcTraceViewer ComboBox mudança de alto contraste

Detalhes

Na ferramenta Microsoft Service Trace Viewer, os controles ComboBox não foram 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 era visível para os clientes por padrão. O .NET 4.8 apresenta essa alteração adicionando as seguintes opções 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 que o comportamento de alto contraste seja alterado, desative-o removendo a seguinte seção do arquivo svcTraceViewer.exe.config:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
Nome Valor
Âmbito Edge
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

Windows Presentation Foundation (WPF)

Melhoria da vinculação de dados para KeyedCollection

Detalhes

Corrigido Binding o uso incorreto 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 definindo-a como false:

<?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
Âmbito Principal
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

Corrigido um problema quando ListBox para de responder se ele contém tipos de valor duplicados

Detalhes

Corrigido um problema em que uma virtualização ItemsControl podia parar de responder durante a rolagem quando sua Items coleção continha objetos duplicados digitados por valores.

Nome Valor
Âmbito Principal
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

Melhorias no algoritmo de alocação de espaço de linhas de estrelas do Grid

Detalhes

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

Sugestão

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

Nome Valor
Âmbito Principal
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

Detalhes

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

Nome Valor
Âmbito Principal
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

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

Detalhes

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

Nome Valor
Âmbito Principal
Versão 4.8
Type Runtime

APIs afetadas

Não detetável através da análise API.

.NET Framework 4.8.1

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