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 Items
coleçã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="Auto"
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.
Melhoria de navegação por teclado no ListBox com hiperlinks
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.