Alterações de tempo de execução para migração para .NET Framework 4.7.x
Este artigo lista os problemas de compatibilidade de aplicativos que foram introduzidos no .NET Framework 4.7, 4.7.1, e 4.7.2.
.NET Framework 4.7
JIT
Geração de código incorreto ao passar e comparar valores UInt16
Detalhes
Em virtude das alterações realizadas no .NET Framework 4.7, em alguns casos, o código gerado pelo compilador JIT em aplicativos em execução no .NET Framework 4.7 é incorretamente comparado com dois valores T:System.UInt16
. Para saber mais, consulte, Issue #11508: Silent bad codegen when passing and comparing ushort args (Problema nº11508: Geração de código silenciosa incorreta ao passar e comparar args ushor), no GitHub.com.
Sugestão
Se houver problemas na comparação dos valores sem sinal de 16 bits no .NET Framework 4.7, atualize para o .NET Framework 4.7.1.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Windows Presentation Foundation (WPF)
Seletor falha ao remover um item de uma coleção INCC personalizada
Detalhes
Um T:System.InvalidOperationException
pode ocorrer no seguinte cenário:
- O ItemsSource de um
T:System.Windows.Controls.Primitives.Selector
é uma coleção com uma implementação personalizada deT:System.Collections.Specialized.INotifyCollectionChanged
. - O item selecionado é removido da coleção.
- O
T:System.Collections.Specialized.NotifyCollectionChangedEventArgs
temP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex
= -1, o que indica uma posição desconhecida.
A pilha de chamadas da exceção começa at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element)
. Essa exceção poderá ocorrer no .NET Framework 4.5 se o aplicativo tiver mais de um thread do Dispatcher. No .NET Framework 4.7, a exceção também pode ocorrer em aplicativos com um único thread Dispatcher.
O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualizar para o .NET Framework 4.7.1.
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
DataGridCellsPanel.BringIndexIntoView gera ArgumentOutOfRangeException
Detalhes
ScrollIntoView(Object) será executado assincronamente quando a virtualização de coluna estiver habilitada, mas as larguras das colunas ainda não estiverem determinadas. Se as colunas forem removidas antes da operação assíncrona, um System.ArgumentOutOfRangeException poderá ocorrer.
Sugestão
Siga um destes procedimentos:
- Atualize para o .NET Framework 4.7.
- Instale o patch de manutenção mais recente para o .NET Framework 4.6.2.
- Evitar remover colunas até que a resposta assíncrona ao método ScrollIntoView(Object) seja concluída.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.6.2 |
Tipo | Runtime |
APIs afetadas
ObjectDisposedException gerada pelo verificador ortográfico do WPF
Detalhes
Ocasionalmente, os aplicativos WPF falham durante o desligamento com uma System.ObjectDisposedException gerada pelo verificador ortográfico. Isso foi corrigido no WPF do .NET Framework 4.7 por meio do tratamento normal da exceção, garantindo que os aplicativos não sejam mais prejudicados. Observe que exceções de primeira chance ocasionais continuariam a ser observadas em aplicativos em execução em um depurador.
Sugestão
Atualizar para o .NET Framework 4.7
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.6.1 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Redimensionar uma Grade pode fazer com que o aplicativo pare de responder
Detalhes
Um loop infinito pode ocorrer durante o layout de um T:System.Windows.Controls.Grid
nas seguintes circunstâncias:
- As definições de linha contêm dois *-rows, ambos declarando um MinHeight e um MaxHeight.
- O conteúdo de *-rows não excede o MaxHeight correspondente.
- A altura disponível da Grade é excedida pelo primeiro MinHeight (além de qualquer outra linha fixa ou automática).
- O aplicativo é direcionado ao .NET Framework 4.7 ou opta pelo algoritmo de alocação 4.7 definindo
Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false
.
O loop também aconteceria com mais de duas linhas ou no caso análogo para colunas. O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualizar para o .NET Framework 4.7.1. Como alternativa, se não precisar do algoritmo de alocação do 4.7, você poderá usar a seguinte configuração:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Tela de fundo RibbonGroup é definida como transparente em builds localizados
Detalhes
A tela de fundo System.Windows.Controls.Ribbon.RibbonGroup em builds localizados sempre foi pintada com um pincel Transparente, o que resultava em uma experiência de interface do usuário ruim. Isso foi corrigido no WPF do .NET Framework 4.7 por meio da atualização dos recursos localizados para System.Windows.Controls.Ribbon.RibbonGroup, que, por sua vez, garante que o pincel correto seja selecionado.
Sugestão
Atualizar para o .NET Framework 4.7
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.6.2 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Atualização da pilha de impressão do WPF
Detalhes
Agora, as APIs de Impressão do WPF que usam System.Printing.PrintQueuechamam a API de Impressão Pacote de Documentos do Windows em vez da API de Impressão XPS, que foi preterida. A alteração foi feita para fins de manutenção. Nem usuários nem os desenvolvedores devem ver todas as alterações no comportamento ou no uso da API. A nova pilha de impressão é habilitada por padrão ao ser executada na Atualização do Windows 10 para Criadores. A pilha de impressão antiga continuará a funcionar como antes nas versões mais antigas do Windows.
Sugestão
Para usar a pilha antiga na Atualização do Windows 10 para Criadores, defina o valor REG_DWORD UseXpsOMPrinting
da chave do Registro HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\Windows Presentation Foundation\Printing
como 1
.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Windows Workflow Foundation (WF)
Agora, o fluxo de trabalho gera a exceção original em vez de NullReferenceException em alguns casos
Detalhes
No .NET Framework 4.6.2 e versões anteriores, quando o método Executar de uma atividade de fluxo de trabalho gera uma exceção com um valor null
para a propriedade Message, o runtime do fluxo de trabalho System.Activities gera System.NullReferenceException, mascarando a exceção original. No .NET Framework 4.7, a exceção mascarada anteriormente é gerada.
Sugestão
Se o código depender do tratamento de System.NullReferenceException, altere-o para capturar as exceções que possam ser geradas por meio das atividades personalizadas.
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
- CodeActivity.Execute(CodeActivityContext)
- AsyncCodeActivity.BeginExecute(AsyncCodeActivityContext, AsyncCallback, Object)
- AsyncCodeActivity<TResult>.BeginExecute(AsyncCodeActivityContext, AsyncCallback, Object)
- WorkflowInvoker.Invoke()
Persistência do fluxo de trabalho SQL adiciona clusters de chave primária e não permite valores nulos em algumas colunas
Detalhes
A partir do .NET Framework 4.7, as tabelas criadas para a SWIS (SQL Workflow Instance Store) pelo script SqlWorkflowInstanceStoreSchema.sql usarão chaves primárias em clusters. Por isso, as identidades não são compatíveis com valores null
. A operação da SWIS não é afetada por essa alteração. As atualizações foram feitas serem compatíveis com replicação transacional do SQL Server.
Sugestão
O arquivo SQL SqlWorkflowInstanceStoreSchemaUpgrade.sql deve ser aplicado a instalações existentes para usar essa alteração. Novas instalações de banco de dados serão alteradas automaticamente.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
.NET Framework 4.7.1
JIT
Geração de código incorreto ao passar e comparar valores UInt16
Detalhes
Em virtude das alterações realizadas no .NET Framework 4.7, em alguns casos, o código gerado pelo compilador JIT em aplicativos em execução no .NET Framework 4.7 é incorretamente comparado com dois valores T:System.UInt16
. Para saber mais, consulte, Issue #11508: Silent bad codegen when passing and comparing ushort args (Problema nº11508: Geração de código silenciosa incorreta ao passar e comparar args ushor), no GitHub.com.
Sugestão
Se houver problemas na comparação dos valores sem sinal de 16 bits no .NET Framework 4.7, atualize para o .NET Framework 4.7.1.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Segurança
RSACng e DSACng podem ser usados novamente em cenários de confiança parcial
Detalhes
CngLightup (usado em várias APIs de criptografia de nível mais elevado, como System.Security.Cryptography.Xml.EncryptedXml) e System.Security.Cryptography.RSACng, em alguns casos, dependem da confiança total. Eles incluem P/Invokes sem declarar permissões de SecurityPermissionFlag.UnmanagedCode e caminhos de código em que System.Security.Cryptography.CngKey tem demandas de permissão de SecurityPermissionFlag.UnmanagedCode. A partir do .NET Framework 4.6.2, CngLightup foi usado para mudar para System.Security.Cryptography.RSACng sempre que possível. Como resultado, aplicativos de confiança parcial que usavam System.Security.Cryptography.Xml.EncryptedXml com êxito começaram a falhar e a lançar exceções SecurityException. Essa alteração adiciona as declarações necessárias para que todas as funções que usam CngLightup tenham as permissões necessárias.
Sugestão
Se essa alteração do .NET Framework 4.6.2 tiver afetado seus aplicativos de confiança parcial de forma negativa, atualize para o .NET Framework 4.7.1.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.6.2 |
Tipo | Runtime |
APIs afetadas
- DSACng(CngKey)
- DSACng.Key
- DSACng.LegalKeySizes
- DSACng.CreateSignature(Byte[])
- DSACng.VerifySignature(Byte[], Byte[])
- RSACng(CngKey)
- RSACng.Key
- RSACng.Decrypt(Byte[], RSAEncryptionPadding)
- RSACng.SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)
Windows Communication Foundation (WCF)
AddressHeaderCollection do WCF agora gera ArgumentException se um elemento addressHeader for nulo
Detalhes
A partir do .NET Framework 4.7.1, o construtor AddressHeaderCollection(IEnumerable<AddressHeader>) gera ArgumentException se um elemento for null
. No .NET Framework 4.7 e versões anteriores, nenhuma exceção é gerada.
Sugestão
Se você encontrar problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou em uma versão posterior, poderá recusá-la adicionando a seguinte linha à seção <runtime>
do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableAddressHeaderCollectionValidation=true" />
</runtime>
</configuration>
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7.1 |
Tipo | Runtime |
APIs afetadas
O valor padrão MsmqSecureHashAlgorithm do WCF agora é SHA256
Detalhes
A partir do .NET Framework 4.7.1, o algoritmo de assinatura da mensagem padrão no WCF para mensagens Msmq é SHA256. No .NET Framework 4.7 e versões anteriores, o algoritmo de assinatura da mensagem padrão é SHA1.
Sugestão
Se você tiver problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou posterior, poderá recusar a alteração adicionando a seguinte linha à seção <runtime>
do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InMsmqEncryptionAlgorithm=true" />
</runtime>
</configuration>
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7.1 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
PipeConnection.GetHashAlgorithm do WCF agora usa o SHA256
Detalhes
A partir do .NET Framework 4.7.1, o Windows Communication Foundation usa o hash SHA256 para gerar nomes aleatórios para pipes nomeados. No .NET Framework 4.7 e nas versões anteriores, ele usa o hash SHA1.
Sugestão
Se houver problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou uma versão posterior, é possível recusá-la adicionando a seguinte linha à seção <runtime>
do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InPipeConnectionGetHashAlgorithm=true" />
</runtime>
</configuration>
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7.1 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Windows Presentation Foundation (WPF)
Pop-ups encadeados com StaysOpen=False
Detalhes
Um pop-up com StaysOpen=False deve fechar quando você clica fora dele. Quando dois ou mais pop-ups do tipo estão encadeados (por exemplo, quando um contém o outro), há muitos problemas, incluindo:
- Abra dois níveis, clique fora do P2, mas dentro do P1. Nada acontecerá.
- Abra dois níveis, clique fora do P1. Ambos pop-ups serão fechados.
- Abra e feche dois níveis. Em seguida, tente abrir novamente o P2. Nada acontecerá.
- Tente abrir três níveis. Não é possível. Nada acontecerá ou os primeiros dois níveis fecharão, dependendo de onde você clicar.
Agora, esses casos (e outras variantes) funcionam conforme o esperado.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7.1 |
Tipo | Runtime |
APIs afetadas
Seletor falha ao remover um item de uma coleção INCC personalizada
Detalhes
Um T:System.InvalidOperationException
pode ocorrer no seguinte cenário:
- O ItemsSource de um
T:System.Windows.Controls.Primitives.Selector
é uma coleção com uma implementação personalizada deT:System.Collections.Specialized.INotifyCollectionChanged
. - O item selecionado é removido da coleção.
- O
T:System.Collections.Specialized.NotifyCollectionChangedEventArgs
temP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex
= -1, o que indica uma posição desconhecida.
A pilha de chamadas da exceção começa at System.Windows.Threading.Dispatcher.VerifyAccess() at System.Windows.DependencyObject.GetValue(DependencyProperty dp) at System.Windows.Controls.Primitives.Selector.GetIsSelected(DependencyObject element)
. Essa exceção poderá ocorrer no .NET Framework 4.5 se o aplicativo tiver mais de um thread do Dispatcher. No .NET Framework 4.7, a exceção também pode ocorrer em aplicativos com um único thread Dispatcher.
O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualizar para o .NET Framework 4.7.1.
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Redimensionar uma Grade pode fazer com que o aplicativo pare de responder
Detalhes
Um loop infinito pode ocorrer durante o layout de um T:System.Windows.Controls.Grid
nas seguintes circunstâncias:
- As definições de linha contêm dois *-rows, ambos declarando um MinHeight e um MaxHeight.
- O conteúdo de *-rows não excede o MaxHeight correspondente.
- A altura disponível da Grade é excedida pelo primeiro MinHeight (além de qualquer outra linha fixa ou automática).
- O aplicativo é direcionado ao .NET Framework 4.7 ou opta pelo algoritmo de alocação 4.7 definindo
Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false
.
O loop também aconteceria com mais de duas linhas ou no caso análogo para colunas. O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualizar para o .NET Framework 4.7.1. Como alternativa, se não precisar do algoritmo de alocação do 4.7, você poderá usar a seguinte configuração:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
.NET Framework 4.7.2
Núcleo
Permitir Unicode em URIs semelhantes a compartilhamentos UNC
Detalhes
No System.Uri, a criação de um URI de arquivo contendo um nome do compartilhamento UNC e caracteres Unicode não resultará mais em um URI com estado interno inválido. O comportamento será alterado somente quando todos os itens a seguir forem verdadeiros:
- O URI tiver o esquema
file:
e for seguido por quatro ou mais barras. - O nome do host começar com um sublinhado ou outro símbolo não reservado.
- O URI contiver caracteres Unicode.
Sugestão
Os aplicativos que funcionam com URIs que contêm Unicode de forma consistente podem ter aceitado o uso desse comportamento para não permitir referências a compartilhamentos UNC. Esses aplicativos devem usar IsUnc.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7.2 |
Tipo | Runtime |
APIs afetadas
Permitir notação de URI relativo especial quando o Unicode estiver presente
Detalhes
Uri não gerará mais uma NullReferenceException ao chamar TryCreate em determinados URIs relativos que contenham Unicode. A reprodução mais simples da NullReferenceException está abaixo, com as duas instruções sendo equivalentes:
bool success = Uri.TryCreate("http:%C3%A8", UriKind.RelativeOrAbsolute, out Uri href);
bool success = Uri.TryCreate("http:è", UriKind.RelativeOrAbsolute, out Uri href);
Para reproduzir a NullReferenceException, os itens a seguir precisam ser verdadeiros:
- O URI precisa ser especificado como relativo, sendo precedido de 'http:' e não seguido de '//'.
- O URI precisa conter Unicode codificado por porcentagem ou símbolos não reservados.
Sugestão
Os usuários que dependem desse comportamento para não permitir URIs relativos precisam especificar UriKind.Absolute durante a criação de um URI.
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7.2 |
Tipo | Runtime |
APIs afetadas
Runtime
Melhor validação do certificado de confiança de cadeia do WCF para autenticação de certificado do Net.Tcp
Detalhes
O .NET framework 4.7.2 melhorou a validação do certificado de confiança de cadeia ao usar a autenticação de certificado com a segurança de transporte com o WCF. Com essa melhoria, os certificados do cliente que são usados para autenticar um servidor precisam ser configurados para autenticação do cliente. Da mesma forma, os certificados do servidor usados para autenticar um servidor precisam ser configurados para autenticação do servidor. Com essa alteração, se o certificado raiz for desabilitado, a validação da cadeia de certificados falhará. A mesma alteração também foi feita para o .NET Framework 3.5 e as versões posteriores por meio do pacote cumulativo de segurança do Windows. Encontre mais informações aqui. Essa alteração é habilitada por padrão e pode ser desabilitada por uma definição de configuração.
Sugestão
Valide se a certificação do servidor e do cliente têm o OID de EKU necessário. Caso contrário, atualize a certificação.
Valide se o certificado raiz é inválido. Nesse caso, atualize o certificado raiz.
Se não for possível atualizar o certificado, você poderá contornar a alteração interruptiva temporariamente com a seguinte definição de configuração. No entanto, recusar a alteração deixará o sistema vulnerável ao problema de segurança.
<appSettings> <add key="wcf:useLegacyCertificateUsagePolicy" value="true" /> </appSettings>
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7.2 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Aplicativos Web
A configuração de aplicativo "dataAnnotations:dataTypeAttribute:disableRegEx" é habilitada por padrão no .NET Framework 4.7.2
Detalhes
No .NET Framework 4.6.1, foi introduzida uma configuração de aplicativo (dataAnnotations:dataTypeAttribute:disableRegEx
) que permite que os usuários desabilitem o uso de expressões regulares em atributos de tipo de dados (como System.ComponentModel.DataAnnotations.EmailAddressAttribute, System.ComponentModel.DataAnnotations.UrlAttribute e System.ComponentModel.DataAnnotations.PhoneAttribute). Isso ajuda a reduzir vulnerabilidades de segurança, por exemplo, impedindo que um ataque de negação de serviço use expressões regulares específicas.
No .NET Framework 4.6.1, essa configuração de aplicativo para desabilitar o uso de expressões regulares era definida como false
por padrão. A partir do .NET Framework 4.7.2, essa opção de configuração é definida com true
por padrão para reduzir ainda mais a vulnerabilidade segura de aplicativos da Web direcionados ao .NET Framework 4.7.2 e superior.
Sugestão
Se observar que as expressões regulares em seu aplicativo Web não funcionam após atualizar para o .NET Framework 4.7.2, você poderá atualizar o valor da dataAnnotations:dataTypeAttribute:disableRegEx
configuração false
para voltar ao comportamento anterior.
<configuration>
<appSettings>
...
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
...
</appSettings>
</configuration>
Nome | Valor |
---|---|
Escopo | Secundária |
Versão | 4.7.2 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Windows Presentation Foundation (WPF)
Melhoria no comportamento das dicas de tecla no WPF
Detalhes
O comportamento das dicas de tecla foi modificado para manter a paridade com o comportamento no Microsoft Word e no Windows Explorer. Ao verificar se o estado da dica de tecla está habilitado ou não no caso de uma SystemKey (especificamente, Key ou F11) que está sendo pressionada, o WPF trata corretamente as teclas de dica de tecla. As dicas de tecla agora descartam um menu, mesmo quando ele é aberto pelo mouse.
Sugestão
N/D
Nome | Valor |
---|---|
Escopo | Microsoft Edge |
Versão | 4.7.2 |
Tipo | Runtime |
APIs afetadas
Não detectáveis com a análise de API.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de