Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo lista os problemas de compatibilidade do aplicativo introduzidos no .NET Framework 4.7, 4.7.1 e 4.7.2.
.NET Framework 4.7
JIT
Geração de código incorreta ao passar e comparar valores UInt16
Detalhes
Devido às alterações introduzidas 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 compara incorretamente dois T:System.UInt16 valores. Para obter mais informações, consulte o Problema nº 11508: geração de código incorreta e silenciosa ao passar e comparar argumentos ushort em GitHub.com.
Sugestão
Se você encontrar problemas na comparação de valores sem sinal de 16 bits no .NET Framework 4.7, atualize para o .NET Framework 4.7.1.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Windows Presentation Foundation (WPF)
Falha no Seletor ao remover um item de uma coleção INCC personalizada
Detalhes
Um T:System.InvalidOperationException pode ocorrer no seguinte cenário:
- O ItemsSource para 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.NotifyCollectionChangedEventArgstemP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex= -1 (indicando 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 do Dispatcher.
O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualize para o .NET Framework 4.7.1.
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
DataGridCellsPanel.BringIndexIntoView lança ArgumentOutOfRangeException
Detalhes
ScrollIntoView(Object) funcionará de forma assíncrona quando a virtualização da coluna estiver habilitada, mas as larguras das colunas ainda não foram determinadas. Se as colunas forem removidas antes do trabalho assíncrono ocorrer, poderá ocorrer uma System.ArgumentOutOfRangeException.
Sugestão
Qualquer um dos seguintes:
- Atualize para o .NET Framework 4.7.
- Instale o patch de manutenção mais recente para o .NET Framework 4.6.2.
- Evite remover colunas até que a resposta assíncrona a ScrollIntoView(Object) seja concluída.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
ObjectDisposedException lançado pelo verificador ortográfico do WPF
Detalhes
Os aplicativos WPF ocasionalmente falham durante o encerramento do aplicativo com um System.ObjectDisposedException gerado pelo verificador ortográfico. Isso é corrigido no WPF do .NET Framework 4.7 manipulando a exceção normalmente e, portanto, garantindo que os aplicativos não sejam mais afetados negativamente. Deve-se observar que exceções ocasionais de primeira chance continuariam a ser observadas em aplicativos executados em um depurador.
Sugestão
Atualizar para o .NET Framework 4.7
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Redimensionar uma Grade pode fazer com que o aplicativo não responda
Detalhes
Um loop infinito pode ocorrer durante o layout de um T:System.Windows.Controls.Grid sob as seguintes circunstâncias:
- As definições de linha contêm duas linhas com *, ambas declarando um MinHeight e um MaxHeight.
- O conteúdo das *-linhas não excede o MaxHeight correspondente.
- A altura disponível do Grid é excedida pelo primeiro valor de MinHeight (mais quaisquer outras linhas fixas ou do tipo Auto).
- O aplicativo tem como destino o .NET Framework 4.7 ou aceita o algoritmo de alocação 4.7 definindo
Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false.
O loop também ocorreria com mais de duas linhas ou no caso análogo para colunas. O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualize para o .NET Framework 4.7.1. Como alternativa, se você não precisar do algoritmo de alocação 4.7, poderá usar a seguinte configuração:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
O plano de fundo do RibbonGroup é definido como transparente em compilações localizadas
Detalhes
System.Windows.Controls.Ribbon.RibbonGroup o fundo em compilações localizadas sempre foi pintado com um pincel transparente, resultando em uma experiência ruim de interface do usuário. Isso é corrigido na correção do WPF do .NET Framework 4.7, atualizando os recursos localizados para System.Windows.Controls.Ribbon.RibbonGroup, o que, por sua vez, garante que o pincel correto seja selecionado.
Sugestão
Atualizar para o .NET Framework 4.7
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Atualização da Pilha de Impressão do WPF
Detalhes
As APIs de Impressão do WPF usando System.Printing.PrintQueue agora chamam a Print Document Package API do Window, em vez da API de Impressão XPS, agora obsoleta. A alteração foi feita com a capacidade de serviço em mente; nem os usuários nem os desenvolvedores devem ver alterações no comportamento ou no uso da API. A nova pilha de impressão é habilitada por padrão quando executada no Windows 10 Creators Update. A pilha de impressão antiga continuará funcionando como antes em versões mais antigas do Windows.
Sugestão
Para usar a pilha antiga no Windows 10 Creators Update, defina o valor REG_DWORD UseXpsOMPrinting da chave de Registro HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\Windows Presentation Foundation\Printing como 1.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Windows Workflow Foundation (WF)
O fluxo de trabalho agora gera 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 Execute de uma atividade de fluxo de trabalho gera uma exceção com um null valor para a Message propriedade, o runtime do Fluxo de Trabalho do System.Activities gera uma System.NullReferenceException, mascarando a exceção original. No .NET Framework 4.7, a exceção mascarada anteriormente é gerada.
Sugestão
Se o seu código depender do tratamento das exceções System.NullReferenceException, altere-o para capturar as exceções que podem ser geradas pelas suas atividades personalizadas.
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
- CodeActivity.Execute(CodeActivityContext)
- AsyncCodeActivity.BeginExecute(AsyncCodeActivityContext, AsyncCallback, Object)
- AsyncCodeActivity<TResult>.BeginExecute(AsyncCodeActivityContext, AsyncCallback, Object)
- WorkflowInvoker.Invoke()
A persistência do SQL de fluxo de trabalho 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 o SWIS (Repositório de Instâncias de Fluxo de Trabalho do SQL) pelo script SqlWorkflowInstanceStoreSchema.sql usam chaves primárias clusterizadas. Por causa disso, as identidades não dão suporte a valores null. A operação do SWIS não é afetada por essa alteração. As atualizações foram feitas para dar suporte à Replicação Transacional do SQL Server.
Sugestão
O arquivo SQL SqlWorkflowInstanceStoreSchemaUpgrade.sql deve ser aplicado a instalações existentes para experimentar essa alteração. Novas instalações de banco de dados terão a alteração automaticamente.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
.NET Framework 4.7.1
JIT
Geração de código incorreta ao passar e comparar valores UInt16
Detalhes
Devido às alterações introduzidas 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 compara incorretamente dois T:System.UInt16 valores. Para obter mais informações, consulte o Problema nº 11508: geração de código incorreta e silenciosa ao passar e comparar argumentos ushort em GitHub.com.
Sugestão
Se você encontrar problemas na comparação de valores sem sinal de 16 bits no .NET Framework 4.7, atualize para o .NET Framework 4.7.1.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Segurança
RSACng e DSACng são mais uma vez utilizáveis em cenários de Confiança Parcial
Detalhes
CngLightup (usado em várias APIs de criptografia de nível superior, como System.Security.Cryptography.Xml.EncryptedXml) e System.Security.Cryptography.RSACng em alguns casos dependem da confiança total. Elas incluem P/Invokes sem declarar SecurityPermissionFlag.UnmanagedCode permissões e caminhos de código em que System.Security.Cryptography.CngKey há demandas de permissão para SecurityPermissionFlag.UnmanagedCode. A partir do .NET Framework 4.6.2, o CngLightup foi usado para alternar para System.Security.Cryptography.RSACng sempre que possível. Como resultado, os aplicativos de confiança parcial que inicialmente usavam System.Security.Cryptography.Xml.EncryptedXml com sucesso começaram a falhar e a gerar exceção SecurityException. Essa alteração adiciona as declarações necessárias para que todas as funções que utilizam o CngLightup tenham as permissões exigidas.
Sugestão
Se essa alteração no .NET Framework 4.6.2 tiver afetado negativamente seus aplicativos de confiança parcial, atualize para o .NET Framework 4.7.1.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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)
O AddressHeaderCollection do WCF agora gera um ArgumentException se um elemento "addressHeader" for nulo.
Detalhes
A partir do .NET Framework 4.7.1, o AddressHeaderCollection(IEnumerable<AddressHeader>) construtor lança um ArgumentException se um dos elementos 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á recusar a alteração adicionando a seguinte linha à <runtime> seção do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableAddressHeaderCollectionValidation=true" />
</runtime>
</configuration>
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7.1 |
| Tipo | Tempo de execução |
APIs afetadas
O valor padrão do MsmqSecureHashAlgorithm do WCF agora é SHA256
Detalhes
A partir do .NET Framework 4.7.1, o algoritmo de assinatura de mensagem padrão no WCF para mensagens msmq é SHA256. No .NET Framework 4.7 e versões anteriores, o algoritmo de assinatura de mensagem padrão é SHA1.
Sugestão
Se você encontrar problemas de compatibilidade com essa alteração no .NET Framework 4.7.1 ou posterior, poderá recusar a alteração adicionando a seguinte linha à <runtime> seção do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InMsmqEncryptionAlgorithm=true" />
</runtime>
</configuration>
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
WCF PipeConnection.GetHashAlgorithm agora usa SHA256
Detalhes
A partir do .NET Framework 4.7.1, o Windows Communication Foundation usa um hash SHA256 para gerar nomes aleatórios para pipes nomeados. No .NET Framework 4.7 e versões anteriores, ele usava um hash SHA1.
Sugestão
Se você encontrar um problema de compatibilidade com essa alteração no .NET Framework 4.7.1 ou posterior, poderá desativá-lo adicionando a seguinte linha à seção <runtime> do arquivo app.config:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.UseSha1InPipeConnectionGetHashAlgorithm=true" />
</runtime>
</configuration>
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Windows Presentation Foundation (WPF)
Pop-ups encadeados com StaysOpen=False
Detalhes
Um pop-up com StaysOpen=False deve ser fechado quando você clica fora do pop-up. Quando dois ou mais pop-ups desse tipo são encadeados (ou seja, um contém outro), houve muitos problemas, incluindo:
- Abra dois níveis, clique fora de P2, mas dentro de P1. Nada acontece.
- Abra dois níveis, clique fora de P1. Ambos os pop-ups se fecham.
- Abra e feche dois níveis. Em seguida, tente abrir P2 novamente. Nada acontece.
- Tente abrir três níveis. Isso não é possível. (Nada acontece ou os dois primeiros níveis fecham, dependendo de onde você clica.)
Esses casos (e outras variantes) agora funcionam conforme o esperado.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7.1 |
| Tipo | Tempo de execução |
APIs afetadas
Falha no Seletor ao remover um item de uma coleção INCC personalizada
Detalhes
Um T:System.InvalidOperationException pode ocorrer no seguinte cenário:
- O ItemsSource para 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.NotifyCollectionChangedEventArgstemP:System.Collections.Specialized.NotifyCollectionChangedEventArgs.OldStartingIndex= -1 (indicando 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 do Dispatcher.
O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualize para o .NET Framework 4.7.1.
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Redimensionar uma Grade pode fazer com que o aplicativo não responda
Detalhes
Um loop infinito pode ocorrer durante o layout de um T:System.Windows.Controls.Grid sob as seguintes circunstâncias:
- As definições de linha contêm duas linhas com *, ambas declarando um MinHeight e um MaxHeight.
- O conteúdo das *-linhas não excede o MaxHeight correspondente.
- A altura disponível do Grid é excedida pelo primeiro valor de MinHeight (mais quaisquer outras linhas fixas ou do tipo Auto).
- O aplicativo tem como destino o .NET Framework 4.7 ou aceita o algoritmo de alocação 4.7 definindo
Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false.
O loop também ocorreria com mais de duas linhas ou no caso análogo para colunas. O problema foi corrigido no .NET Framework 4.7.1.
Sugestão
Atualize para o .NET Framework 4.7.1. Como alternativa, se você não precisar do algoritmo de alocação 4.7, poderá usar a seguinte configuração:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
.NET Framework 4.7.2
Núcleo
Permitir Unicode em URIs semelhantes a compartilhamentos UNC
Detalhes
Na System.Uri, a construção de um URI de arquivo contendo tanto um nome de compartilhamento UNC quanto caracteres Unicode não resultará mais em um URI com estado interno inválido. O comportamento será alterado somente quando todos os seguintes forem verdadeiros:
- O URI tem o esquema
file:e é seguido por quatro ou mais barras. - O nome do host começa com um sublinhado ou outro símbolo não reservado.
- O URI contém caracteres Unicode.
Sugestão
Aplicativos que trabalham com URIs que contêm o Unicode de forma consistente podem ter usado esse comportamento para não permitir referências a compartilhamentos UNC. Esses aplicativos devem usar IsUnc em vez disso.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7.2 |
| Tipo | Tempo de execução |
APIs afetadas
Suporte à notação de URI relativo especial quando Unicode estiver presente
Detalhes
Uri não gerará mais um NullReferenceException ao chamar TryCreate em certas URIs relativas que contêm Unicode. A reprodução mais simples da NullReferenceException é 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 o NullReferenceException, os seguintes itens devem ser verdadeiros:
- O URI deve ser especificado como relativo, acrescentando-o com 'http:' e não seguindo-o com '//'.
- O URI deve conter Unicode codificado em percentagem ou símbolos não reservados.
Sugestão
Os usuários que dependem desse comportamento para não permitir URIs relativas devem, em vez disso, especificar UriKind.Absolute ao criar um URI.
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7.2 |
| Tipo | Tempo de execução |
APIs afetadas
Tempo de execução
Validação aprimorada de certificado de confiança da cadeia WCF para autenticação de certificado Net.Tcp
Detalhes
O .NET Framework 4.7.2 melhora a validação do certificado de confiança da cadeia ao usar a autenticação de certificado com segurança de transporte com o WCF. Com essa melhoria, os certificados de cliente usados para autenticar em um servidor devem ser configurados para autenticação do cliente. Da mesma forma, os certificados de servidor que são para a autenticação de um servidor devem ser configurados para autenticação de servidor. Com essa alteração, se o certificado raiz estiver desabilitado, a validação da cadeia de certificados falhará. A mesma alteração também foi feita para o .NET Framework 3.5 e versões posteriores por meio do roll-up de segurança do Windows. Você pode encontrar mais informações no KB 4055269. Essa alteração está ativada por padrão e pode ser desativada por uma configuração.
Sugestão
Valide se a certificação do servidor e do cliente tem a OID de EKU necessária. Caso contrário, atualize sua certificação.
Valide se o certificado raiz é inválido. Nesse caso, atualize o certificado raiz.
Se você não puder atualizar o certificado, você pode contornar a mudança drástica temporariamente com a seguinte configuração. No entanto, recusar a alteração deixará seu sistema vulnerável ao problema de segurança.
<appSettings> <add key="wcf:useLegacyCertificateUsagePolicy" value="true" /> </appSettings>
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7.2 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Aplicativos Web
A configuração do aplicativo "dataAnnotations:dataTypeAttribute:disableRegEx" está ativada 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 aos usuários desabilitar o uso de expressões regulares em atributos de tipo de dados (como System.ComponentModel.DataAnnotations.EmailAddressAttribute, System.ComponentModel.DataAnnotations.UrlAttributee System.ComponentModel.DataAnnotations.PhoneAttribute). Isso ajuda a reduzir a vulnerabilidade de segurança, como evitar a possibilidade de um ataque de negação de serviço usando expressões regulares específicas.
No .NET Framework 4.6.1, essa configuração de aplicativo para desabilitar o uso do RegEx foi definida false como por padrão. A partir do .NET Framework 4.7.2, essa opção de configuração é definida true por padrão para reduzir ainda mais a vulnerabilidade segura para aplicativos Web destinados ao .NET Framework 4.7.2 e superior.
Sugestão
Se você descobrir que as expressões regulares em seu aplicativo Web não funcionam após a atualização para o .NET Framework 4.7.2, você poderá atualizar o valor da configuração dataAnnotations:dataTypeAttribute:disableRegEx para false para reverter ao comportamento anterior.
<configuration>
<appSettings>
...
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
...
</appSettings>
</configuration>
| Nome | Valor |
|---|---|
| Scope | Menor |
| Versão | 4.7.2 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.
Windows Presentation Foundation (WPF)
Comportamento de dicas de chave aprimorado no WPF
Detalhes
O comportamento das Dicas de Teclas foi modificado para alinhar-se ao comportamento no Microsoft Word e no Windows Explorer. Ao verificar se o estado da dica de chave está habilitado ou não no caso de um SystemKey ser pressionado (em particular, Key ou F11), o WPF manipula as teclas de dica de tecla adequadamente. As dicas de chave agora descartam um menu mesmo quando ele é aberto pelo mouse.
Sugestão
Não aplicável
| Nome | Valor |
|---|---|
| Scope | Edge |
| Versão | 4.7.2 |
| Tipo | Tempo de execução |
APIs afetadas
Não detectável por meio da análise de API.