Partilhar via


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

Este artigo lista os problemas de compatibilidade de aplicativos que foram introduzidos no .NET Framework 4.6, 4.6.1 e 4.6.2.

.NET framework 4.6

ASP.NET

GridViews com AllowCustomPaging definido como true pode disparar o evento PageIndexChanging ao sair da página final do modo de exibição

Detalhes

Um bug no .NET Framework 4.5 faz com System.Web.UI.WebControls.GridView.PageIndexChanging que, às vezes, não seja acionado para System.Web.UI.WebControls.GridViews que habilitaram System.Web.UI.WebControls.GridView.AllowCustomPagingo .

Sugestão

Esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework. Como solução alternativa, o aplicativo pode fazer um BindGrid explícito em qualquer um Page_Load que atinja essas condições (o está na última página e LastSystem.Web.UI.WebControls.GridView.PageSizeSystem.Web.UI.WebControls.GridView é diferente de System.Web.UI.WebControls.GridView.PageSize). Como alternativa, o aplicativo pode ser modificado para permitir a paginação (em vez de paginação personalizada), pois esse cenário não demonstra o problema.

Nome Valor
Âmbito Menor
Versão 4,5
Type Runtime

APIs afetadas

Principal

Um ConcurrentDictionary serializado no .NET Framework 4.5 com NetDataContractSerializer não pode ser desserializado pelo .NET Framework 4.5.1 ou 4.5.2

Detalhes

Devido a alterações internas no tipo, ConcurrentDictionary<TKey,TValue> os objetos que são serializados com o .NET Framework 4.5 usando o System.Runtime.Serialization.NetDataContractSerializer não podem ser desserializados no .NET Framework 4.5.1 ou no .NET Framework 4.5.2.Observe que mover na outra direção (serializar com o .NET Framework 4.5.x e desserializar com o .NET Framework 4.5) funciona. Da mesma forma, toda a serialização entre versões 4.x funciona com o .NET Framework 4.6.Serializar e desserializar com uma única versão do .NET Framework não é afetado.

Sugestão

Se for necessário serializar e desserializar um System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> entre o .NET Framework 4.5 e o .NET Framework 4.5.1/4.5.2, um serializador diferente como o System.Runtime.Serialization.DataContractSerializer deve ser usado em vez do System.Runtime.Serialization.NetDataContractSerializer. Como alternativa, como esse problema é resolvido no .NET Framework 4.6, ele pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Menor
Versão 4.5.1
Type Runtime

APIs afetadas

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

AppDomainSetup.DynamicBase não é mais randomizado por UseRandomizedStringHashAlgorithm

Detalhes

Antes do .NET Framework 4.6, o valor de seria randomizado entre domínios de aplicativo, ou entre processos, se UseRandomizedStringHashAlgorithm estivesse habilitado no arquivo de DynamicBase configuração do aplicativo. A partir do .NET Framework 4.6, DynamicBase retornará um resultado estável entre diferentes instâncias de um aplicativo em execução e entre diferentes domínios de aplicativo. As bases dinâmicas ainda serão diferentes para diferentes aplicativos; Essa alteração remove apenas o elemento de nomenclatura aleatória para instâncias diferentes do mesmo aplicativo.

Sugestão

Esteja ciente de que a habilitação UseRandomizedStringHashAlgorithm não resultará em DynamicBase ser randomizado. Se uma base aleatória for necessária, ela deverá ser produzida no código do seu aplicativo e não por meio dessa API.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

Chamar Attribute.GetCustomAttributes em uma propriedade de indexador não lança mais AmbiguousMatchException se a ambiguidade puder ser resolvida pelo tipo de índice

Detalhes

Antes do .NET Framework 4.6, chamar GetCustomAttribute(s) uma propriedade de indexador que diferia de outra propriedade apenas pelo tipo do índice resultaria em um System.Reflection.AmbiguousMatchExceptionarquivo . A partir do .NET Framework 4.6, os atributos da propriedade serão retornados corretamente.

Sugestão

Lembre-se de que GetCustomAttribute(s) funcionará(ão) com mais freqüência agora. Se um aplicativo dependia anteriormente do , o reflexo System.Reflection.AmbiguousMatchExceptionagora deve ser usado para procurar explicitamente vários indexadores, em vez disso.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

COR_PRF_GC_ROOT_HANDLEs não estão sendo enumerados por criadores de perfil

Detalhes

No .NET Framework v4.5.1, a API RootReferences2() de criação de perfil está incorretamente nunca retornando COR_PRF_GC_ROOT_HANDLE (eles são retornados como COR_PRF_GC_ROOT_OTHER em vez disso). Esse problema é corrigido a partir do .NET Framework 4.6.

Sugestão

Esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Menor
Versão 4.5.1
Type Runtime

APIs afetadas

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

ETW EventListeners não capturam eventos de provedores com palavras-chave explícitas (como o provedor TPL)

Detalhes

ETW EventListeners com uma máscara de palavra-chave em branco não capturam corretamente eventos de provedores com palavras-chave explícitas. No .NET Framework 4.5, o provedor TPL começou a fornecer palavras-chave explícitas e disparou esse problema. No .NET Framework 4.6, EventListeners foram atualizados para não ter mais esse problema.

Sugestão

Para contornar esse problema, substitua chamadas para EnableEvents(EventSource, EventLevel) com chamadas para a sobrecarga EnableEvents que especifica explicitamente a máscara "quaisquer palavras-chave" a usar: EnableEvents(eventSource, level, unchecked((EventKeywords)0xFFFFffffFFFFffff)).

Como alternativa, esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Edge
Versão 4,5
Type Runtime

APIs afetadas

O calendário persa agora usa o algoritmo solar Hijri

Detalhes

Começando com o .NET Framework 4.6, a System.Globalization.PersianCalendar classe usa o algoritmo solar Hijri. A conversão de datas entre o System.Globalization.PersianCalendar e outros calendários pode produzir um resultado ligeiramente diferente começando com o .NET Framework 4.6 para datas anteriores a 1800 ou posteriores a 2023 (gregoriano). Além disso, PersianCalendar.MinSupportedDateTime é agora March 22, 0622 em vez de March 21, 0622.

Sugestão

Esteja ciente de que algumas datas iniciais ou tardias podem ser ligeiramente diferentes ao usar o PersianCalendar no .NET Framework 4.6. Além disso, ao serializar datas entre processos que podem ser executados em diferentes versões do .NET Framework, não as armazene como cadeias de caracteres de data PersianCalendar (pois esses valores podem ser diferentes).

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

Os objetos de reflexão não podem mais ser passados do código gerenciado para clientes DCOM fora do processo

Detalhes

Os objetos de reflexão não podem mais ser passados do código gerenciado para clientes DCOM fora do processo. Os seguintes tipos são afetados:

Chamadas para IMarshal o retorno E_NOINTERFACEdo objeto .

Sugestão

Atualize o código de empacotamento para trabalhar com objetos sem reflexão.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

TargetFrameworkName para domínio de aplicativo padrão não assume mais como padrão null se não estiver definido

Detalhes

O System.AppDomainSetup.TargetFrameworkName foi anteriormente nulo no domínio do aplicativo padrão, a menos que tenha sido definido explicitamente. A partir da versão 4.6, a System.AppDomainSetup.TargetFrameworkName propriedade para o domínio do aplicativo padrão terá um valor padrão derivado do TargetFrameworkAttribute (se houver um). Os domínios de aplicativo não padrão continuarão a herdar o seu System.AppDomainSetup.TargetFrameworkName do domínio de aplicativo padrão (que não será padrão para nulo na versão 4.6), a menos que seja explicitamente substituído.

Sugestão

O código deve ser atualizado para não depender do TargetFrameworkName padrão para null. Se for necessário que essa propriedade continue a ser avaliada como null, ela poderá ser explicitamente definida como esse valor.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

X509Certificate2.ToString(Boolean) não lança agora quando o .NET não pode manipular o certificado

Detalhes

No .NET Framework 4.5.2 e versões anteriores, esse método seria lançado se true fosse passado para o parâmetro verbose e houvesse certificados instalados que não eram suportados pelo .NET Framework. Agora, o método terá êxito e retornará uma cadeia de caracteres válida que omite as partes inacessíveis do certificado.

Sugestão

Qualquer código dependente deve X509Certificate2.ToString(Boolean) ser atualizado para esperar que a cadeia de caracteres retornada possa excluir alguns dados de certificado (como chave pública, chave privada e extensões) em alguns casos em que a API teria sido lançada anteriormente.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

Dados

Tentando uma conexão TCP/IP com um banco de dados do SQL Server que resolve com localhost falha

Detalhes

No .NET Framework 4.6 e 4.6.1, a tentativa de uma conexão TCP/IP com um banco de dados do SQL Server que resolve falhar com o erro, "Ocorreu um erro relacionado à localhost rede ou específico da instância ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não está acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir ligações remotas. (provedor: Interfaces de rede SQL, erro: 26 - Erro ao localizar servidor/instância especificada)"

Sugestão

Esse problema foi resolvido e o comportamento anterior restaurado no .NET Framework 4.6.2. Para se conectar a um banco de dados do SQL Server que resolve para localhost, atualize para o .NET Framework 4.6.2.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

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

Depurador

Valores coalescer nulos não são visíveis no depurador até uma etapa depois

Detalhes

Um bug no .NET Framework 4.5 faz com que os valores definidos por meio de uma operação de coalescência nula não fiquem visíveis no depurador imediatamente após a operação de atribuição ser executada quando executada na versão de 64 bits do Framework.

Sugestão

Passar mais uma vez no depurador fará com que o valor local/campo seja atualizado corretamente. Além disso, esse problema foi corrigido no .NET Framework 4.6; a atualização para essa versão do quadro deve resolver o problema.

Nome Valor
Âmbito Edge
Versão 4,5
Type Runtime

APIs afetadas

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

Rede

ContentDisposition DateTimes retorna uma cadeia de caracteres ligeiramente diferente

Detalhes

As representações de cadeia de caracteres de System.Net.Mime.ContentDisposition's foram atualizadas, começando em 4.6, para sempre representar o componente de hora de a System.DateTime com dois dígitos. Isto é para cumprir com RFC822 e RFC2822. Isso faz com que ToString() retorne uma cadeia de caracteres ligeiramente diferente na versão 4.6 em cenários em que um dos elementos de tempo da disposição era anterior às 10h00. Observe que ContentDispositions às vezes são serializados por meio da conversão em cadeias de caracteres, portanto, quaisquer ToString() operações, serialização ou chamadas GetHashCode devem ser revisadas.

Sugestão

Não espere que as representações de cadeia de caracteres de ContentDispositions de diferentes versões do .NET Framework sejam comparadas corretamente entre si. Converta as cadeias de caracteres de volta para ContentDispositions, se possível, antes de realizar uma comparação.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

Serialização

A mensagem de exceção foi alterada para falha na serialização DataContract no caso de um tipo desconhecido

Detalhes

A partir do .NET Framework 4.6, a mensagem de exceção fornecida se um System.Runtime.Serialization.DataContractSerializer ou System.Runtime.Serialization.Json.DataContractJsonSerializer falhar ao serializar ou desserializar devido a 'tipos conhecidos' ausentes foi esclarecida.

Sugestão

Os aplicativos não devem depender de mensagens de exceção específicas. Se um aplicativo depender dessa mensagem, atualize-o para esperar a nova mensagem ou (de preferência) altere-o para depender apenas do tipo de exceção.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

Configuração e implantação

Alterações de versão do produto no .NET Framework 4.6 e versões posteriores

Detalhes

O controle de versão do produto foi alterado em relação às versões anteriores do .NET Framework e, particularmente, do .NET Framework 4, 4.5, 4.5.1 e 4.5.2. Seguem-se as alterações detalhadas:

  • O valor da Version entrada na HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full chave foi alterado para 4.6.xxxxx o .NET Framework 4.6 e suas versões pontuais e para 4.7.xxxxx o .NET Framework 4.7 e 4.7.1. No .NET Framework 4.5, 4.5.1 e 4.5.2, ele tinha o formato 4.5.xxxxx.
  • O controle de versão de arquivo e produto para arquivos do .NET Framework foi alterado do esquema de controle de versão anterior de 4.0.30319.x para 4.6.X.0 para o .NET Framework 4.6 e suas versões pontuais, e para 4.7.X.0 para o .NET Framework 4.7 e 4.7.1. Você pode ver esses novos valores quando visualiza as Propriedades do arquivo depois de clicar com o botão direito do mouse em um arquivo.
  • Os AssemblyFileVersionAttribute atributos e AssemblyInformationalVersionAttribute para assemblies gerenciados têm valores Version no formato 4.6.X.0 para o .NET Framework 4.6 e suas versões pontuais, e 4.7.X.0 para o .NET Framework 4.7 e 4.7.1.
  • No .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 e 4.7.1, a Environment.Version propriedade retorna a cadeia de caracteres 4.0.30319.42000de versão fixa . No .NET Framework 4, 4.5, 4.5.1 e 4.5.2, ele retorna cadeias de caracteres de versão no formato 4.0.30319.xxxxx (por exemplo, "4.0.30319.18010"). Observe que não recomendamos que o código do aplicativo tenha qualquer nova dependência da propriedade Environment.Version.

Para obter mais informações, consulte Como determinar quais versões do .NET Framework estão instaladas.

Sugestão

Em geral, os aplicativos devem depender das técnicas recomendadas para detetar coisas como a versão de tempo de execução do .NET Framework e o diretório de instalação:

Importante

O nome da subchave é NET Framework Setup, não .NET Framework Setup.

  • Para determinar o caminho do diretório para o Common Language Runtime do .NET Framework, chame o RuntimeEnvironment.GetRuntimeDirectory() método.
  • Para obter a versão CLR, chame o RuntimeEnvironment.GetSystemVersion() método. Para o .NET Framework 4 e suas versões pontuais (o .NET Framework 4.5, 4.5.1, 4.5.2 e .NET Framework 4.6, 4.6.1, 4.6.2, 4.7 e 4.7.1), ele retorna a cadeia de caracteres v4.0.30319.
Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

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

O .NET Framework 4.6 não usa uma versão 4.5.x.x ao se registrar no registro

Detalhes

Como seria de esperar, a chave de versão definida no registo (at HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full) para o .NET Framework 4.6 começa com '4.6', não com '4.5'. Os aplicativos que dependem dessas chaves do Registro para saber quais versões do .NET Framework estão instaladas em uma máquina devem ser atualizados para entender que a 4.6 é uma nova versão possível e compatível com versões anteriores da 4.5.x.

Sugestão

Atualize os aplicativos que investigam uma instalação do .NET Framework 4.5 procurando chaves do Registro 4.5 para também aceitar a versão 4.6.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

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

Windows Communication Foundation (WCF)

Serviços WCF que usam NETTCP com segurança SSL e autenticação de certificado MD5

Detalhes

O .NET Framework 4.6 adiciona TLS 1.1 e TLS 1.2 à lista de protocolos padrão SSL do WCF. Quando as máquinas cliente e servidor têm o .NET Framework 4.6 ou posterior instalado, o TLS 1.2 é usado para negociação. TLS 1.2 não suporta autenticação de certificado MD5. Como resultado, se um cliente usa um certificado MD5, o cliente WCF não conseguirá se conectar ao serviço WCF.

Sugestão

Você pode contornar esse problema para que um cliente WCF pode se conectar a um servidor WCF seguindo um destes procedimentos:

  • Atualize o certificado para não usar o algoritmo MD5. Esta é a solução recomendada.
  • Se a associação não estiver configurada dinamicamente no código-fonte, atualize o arquivo de configuração do aplicativo para usar o TLS 1.1 ou uma versão anterior do protocolo. Isso permite que você continue a usar um certificado com o algoritmo de hash MD5.

Aviso

Esta solução alternativa não é recomendada, uma vez que um certificado com o algoritmo de hash MD5 é considerado inseguro.

O seguinte arquivo de configuração faz isso:

<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding>
          <security mode= "None/Transport/Message/TransportWithMessageCredential" >
            <transport clientCredentialType="None/Windows/Certificate"
                       protectionLevel="None/Sign/EncryptAndSign"
                       sslProtocols="Ssl3/Tls1/Tls11">
            </transport>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.ServiceModel>
</configuration>

Aviso

Esta solução alternativa não é recomendada, uma vez que um certificado com o algoritmo de hash MD5 é considerado inseguro.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

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

Windows Presentation Foundation (WPF)

Acessar os itens selecionados de um WPF DataGrid de um manipulador do evento UnloadingRow do DataGrid pode causar uma NullReferenceException

Detalhes

Devido a um bug no .NET Framework 4.5, manipuladores de eventos para DataGrid eventos que envolvem a remoção de uma linha podem fazer com que um System.NullReferenceException seja lançado se acessarem as DataGridpropriedades do ou System.Windows.Controls.Primitives.Selector.SelectedItemSystem.Windows.Controls.Primitives.MultiSelector.SelectedItems .

Sugestão

Esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Menor
Versão 4,5
Type Runtime

APIs afetadas

Chamar Items.Refresh em um WPF ListBox, ListView ou DataGrid com itens selecionados pode fazer com que itens duplicados apareçam no elemento

Detalhes

No .NET Framework 4.5, chamar ListBox.Items.Refresh do código enquanto os itens são selecionados em um System.Windows.Controls.ListBox pode fazer com que os itens selecionados sejam duplicados na lista. Um problema semelhante ocorre com System.Windows.Controls.ListView e System.Windows.Controls.DataGrid. Isso é corrigido no .NET Framework 4.6.

Sugestão

Esse problema pode ser resolvido desmarcando programaticamente itens antes System.Windows.Data.CollectionView.Refresh() de ser chamado e, em seguida, reselecionando-os depois que a chamada é concluída. Como alternativa, esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Value
Scope Menor
Versão 4,5
Tipo Runtime

APIs afetadas

CoerceIsSelectionBoxRealçado

Detalhes

Certas sequências de ações envolvendo um System.Windows.Controls.ComboBox e sua fonte de dados podem resultar em um System.NullReferenceExceptionarquivo .

Sugestão

Se possível, atualize para o .NET Framework 4.6.2.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

ListBoxItem IsSelected problema de vinculação com ObservableCollection<T>. Mudança

Detalhes

Chamar Move(Int32, Int32) ou MoveItem(Int32, Int32) em uma coleção vinculada a um System.Windows.Controls.ListBox com itens selecionados pode levar a um comportamento errático com seleção ou desseleção futura de System.Windows.Controls.ListBox itens.

Sugestão

Ligar System.Collections.ObjectModel.Collection<T>.Remove(T) e System.Collections.ObjectModel.Collection<T>.Insert(Int32, T) em vez de Move(Int32, Int32) vai contornar esse problema. Como alternativa, esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Menor
Versão 4,5
Type Runtime

APIs afetadas

Clicar com o botão direito do mouse em um cabeçalho de linha WPF DataGrid altera a seleção DataGrid

Detalhes

Clicar com o botão direito do mouse em um cabeçalho de linha selecionado System.Windows.Controls.DataGrid enquanto várias linhas são selecionadas faz com que a System.Windows.Controls.DataGridseleção do seja alterada para apenas essa linha.

Sugestão

Esse problema foi corrigido no .NET Framework 4.6 e pode ser resolvido atualizando para essa versão do .NET Framework.

Nome Valor
Âmbito Edge
Versão 4,5
Type Runtime

APIs afetadas

WPF gera um processo wisptis.exe que pode congelar o mouse

Detalhes

Foi introduzido um problema na versão 4.5.2 que faz com wisptis.exe que seja gerado um problema que pode congelar a entrada do rato.

Sugestão

Uma correção para esse problema está disponível em uma versão de serviço do .NET Framework 4.5.2 (pacote cumulativo de hotfix 3026376) ou atualizando para o .NET Framework 4.6

Nome Valor
Âmbito Principal
Versão 4.5.2
Type Runtime

APIs afetadas

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

A verificação ortográfica do WPF em controles habilitados para texto não funcionará no Windows 10 para idiomas que não estejam na lista de idiomas de entrada do sistema operacional

Detalhes

Ao executar no Windows 10, o verificador ortográfico pode não funcionar para controles habilitados para texto WPF porque os recursos de verificação ortográfica da plataforma estão disponíveis apenas para idiomas presentes na lista de idiomas de entrada. No Windows 10, quando um idioma é adicionado à lista de teclados disponíveis, o Windows baixa e instala automaticamente um pacote FOD (Recurso sob Demanda) correspondente que fornece recursos de verificação ortográfica. Ao adicionar o idioma à lista de idiomas de entrada, o verificador ortográfico será suportado.

Sugestão

Lembre-se de que o idioma ou texto a ser verificado ortograficamente deve ser adicionado como um idioma de entrada para que a verificação ortográfica funcione no Windows 10.

Nome Valor
Âmbito Edge
Versão 4.6
Type Runtime

APIs afetadas

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

As janelas do WPF são renderizadas sem recorte ao se estender para fora de um único monitor

Detalhes

No .NET Framework 4.6 em execução no Windows 8 e superior, toda a janela é renderizada sem recorte quando se estende para fora de uma única exibição em um cenário de vários monitores. Isso é diferente das versões anteriores do .NET Framework que cortavam janelas do WPF que se estendiam além de uma única exibição.

Sugestão

Esse comportamento (cortar ou não) pode ser explicitamente definido usando o <EnableMultiMonitorDisplayClipping> elemento in <appSettings> no arquivo de configuração de um aplicativo ou definindo a propriedade na inicialização do EnableMultiMonitorDisplayClipping aplicativo.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

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

.NET Framework 4.6.1

Ferramentas

Contract.Invariant ou Contract.Requires<TException> não considera String.IsNullOrEmpty puro

Detalhes

Para aplicativos destinados ao .NET Framework 4.6.1, se o contrato invariante ou Contract.Invariant o contrato de pré-condição para Requires chamar o String.IsNullOrEmpty método, o regravador emitirá um aviso do compilador CC1036: "Chamada detetada para o método 'System.String.IsNullOrWhiteSpace(System.String)' sem [Pure] no método." Este é um aviso do compilador em vez de um erro do compilador.

Sugestão

Esse comportamento foi abordado no problema #339 do GitHub. Para eliminar esse aviso, você pode baixar e compilar uma versão atualizada do código-fonte para a ferramenta Contratos de código do GitHub. As informações de download encontram-se na parte inferior da página.

Nome Valor
Âmbito Menor
Versão 4.6.1
Type Runtime

APIs afetadas

Windows Presentation Foundation (WPF)

Rolagem de itens em uma lista plana com itens de diferentes alturas de pixels

Detalhes

Quando um System.Windows.Controls.ItemsControl exibe uma coleção usando virtualização (IsVirtualizing=true) e rolagem de item (ScrollUnit=Item), e quando o controle rola para exibir um item cuja altura em pixels difere de seus vizinhos, o System.Windows.Controls.VirtualizingStackPanel itera sobre todos os itens da coleção. A interface do usuário não responde durante essa iteração. A iteração ocorre em outras circunstâncias, mesmo em versões anteriores do .NET Framework. Por exemplo, ocorre quando a rolagem de pixels (ScrollUnit=Pixel) ao encontrar um item com altura de pixel diferente e quando os dados hierárquicos de rolagem de item (como um System.Windows.Controls.TreeView ou um System.Windows.Controls.ItemsControl com agrupamento habilitado) ao encontrar um item com um número diferente de itens descendentes do que seus vizinhos. Para o caso de rolagem de item e altura de pixel diferente, a iteração foi introduzida no .NET Framework 4.6.1 para corrigir bugs no layout de dados hierárquicos. Não é necessário se os dados forem simples (sem hierarquia) e o .NET Framework 4.6.2 não o fizer nesse caso.

Sugestão

Se a iteração ocorrer no .NET Framework 4.6.1, mas não em versões anteriores - ou seja, se o System.Windows.Controls.ItemsControl item estiver rolando uma lista plana com itens de altura de pixel diferente - há duas soluções:

  • Instale o .NET Framework 4.6.2.
  • Instale o hotfix HR 1605 para .NET Framework 4.6.1.
Nome Valor
Âmbito Menor
Versão 4.6.1
Type Runtime

APIs afetadas

ObjectDisposedException lançado pelo corretor ortográfico WPF

Detalhes

Aplicativos WPF ocasionalmente falham durante o desligamento do aplicativo com um System.ObjectDisposedException lançado pelo corretor ortográfico. Isso é corrigido no .NET Framework 4.7 WPF manipulando a exceção normalmente e, portanto, garantindo que os aplicativos não sejam mais afetados negativamente. Deve-se notar que exceções ocasionais de primeira chance continuariam a ser observadas em aplicativos executados sob um depurador.

Sugestão

Atualizar para o .NET Framework 4.7

Nome Valor
Âmbito Edge
Versão 4.6.1
Type Runtime

APIs afetadas

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

A verificação ortográfica do WPF falha de maneiras inesperadas

Detalhes

Isso inclui uma série de problemas do Corretor Ortográfico do WPF:

  • WPF Corretor Ortográfico às vezes lança System.Runtime.InteropServices.COMException
  • WPF Corretor ortográfico falha com UnauthorizedAccessException quando os aplicativos são iniciados usando 'executar como usuário diferente'
  • O Corretor Ortográfico do WPF identifica incorretamente erros ortográficos em palavras compostas como 'Hausnummer' em alemão.

Sugestão

Problema #1 - Isso foi corrigido no .NET Framework 4.6.2 Problema #2 - O Corretor Ortográfico do WPF não é mais suportado quando os aplicativos são iniciados usando 'executar como usuário diferente'. A partir do .NET Framework 4.6.2, os aplicativos iniciados dessa maneira não falharão mais inesperadamente - em vez disso, o Corretor Ortográfico será desativado silenciosamente. Problema #3 - Isso foi corrigido no .NET Framework 4.6.2.

Nome Valor
Âmbito Edge
Versão 4.6.1
Type Runtime

APIs afetadas

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

.NET Framework 4.6.2

Dados

Tentando uma conexão TCP/IP com um banco de dados do SQL Server que resolve com localhost falha

Detalhes

No .NET Framework 4.6 e 4.6.1, a tentativa de uma conexão TCP/IP com um banco de dados do SQL Server que resolve falhar com o erro, "Ocorreu um erro relacionado à localhost rede ou específico da instância ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não está acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir ligações remotas. (provedor: Interfaces de rede SQL, erro: 26 - Erro ao localizar servidor/instância especificada)"

Sugestão

Esse problema foi resolvido e o comportamento anterior restaurado no .NET Framework 4.6.2. Para se conectar a um banco de dados do SQL Server que resolve para localhost, atualize para o .NET Framework 4.6.2.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

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

O período de bloqueio do pool de conexões para bancos de dados SQL do Azure foi removido

Detalhes

A partir do .NET Framework 4.6.2, para solicitações de abertura de conexão para bancos de dados SQL conhecidos do Azure (*.database.windows.net, *.database.chinacloudapi.cn, *.database.usgovcloudapi.net, *.database.cloudapi.de), o período de bloqueio do pool de conexões é removido e os erros de abertura de conexão não são armazenados em cache. As tentativas de repetir solicitações de abertura de conexão ocorrerão quase imediatamente após erros de conexão transitórios. Essa alteração permite que a tentativa de abertura de conexão seja repetida imediatamente para bancos de dados SQL do Azure, melhorando assim o desempenho de aplicativos habilitados para nuvem. Para todas as outras tentativas de conexão, o período de bloqueio do pool de conexões continua a ser aplicado.

No .NET Framework 4.6.1 e versões anteriores, quando um aplicativo encontra uma falha de conexão transitória ao se conectar a um banco de dados, a tentativa de conexão não pode ser repetida rapidamente, porque o pool de conexões armazena o erro em cache e o lança novamente por 5 segundos a 1 minuto. Para obter mais informações, consulte Pool de conexões do SQL Server (ADO.NET). Esse comportamento é problemático para conexões com bancos de dados SQL do Azure, que geralmente falham com erros transitórios que normalmente são recuperados em poucos segundos. O recurso de bloqueio do pool de conexões significa que o aplicativo não pode se conectar ao banco de dados por um período extenso, mesmo que o banco de dados esteja disponível e o aplicativo precise renderizar em poucos segundos.

Sugestão

Se esse comportamento for indesejável, o período de bloqueio do pool de conexões pode ser configurado definindo a propriedade introduzida System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod no .NET Framework 4.6.2. O valor da propriedade é um membro da System.Data.SqlClient.PoolBlockingPeriod enumeração que pode ter um dos três valores:

O comportamento anterior pode ser restaurado definindo a System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod propriedade como AlwaysBlock.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

Globalização

Categorias padrão Unicode versão 8.0 agora suportadas

Detalhes

No .NET Framework 4.6.2, os dados Unicode foram atualizados do Unicode Standard versão 6.3 para a versão 8.0. Ao solicitar categorias de caracteres Unicode no .NET Framework 4.6.2, alguns resultados podem não corresponder aos resultados em versões anteriores do .NET Framework. Esta mudança afeta principalmente as sílabas de Cherokee e os sinais e marcas de tom das vogais New Tai Lue.

Sugestão

Revise o código e remova / altere a lógica que depende de categorias de caracteres Unicode codificadas.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

Segurança

RSACng e DSACng são novamente 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 de confiança total. Isso inclui P/Invokes sem declarar SecurityPermissionFlag.UnmanagedCode permissões e caminhos de código onde System.Security.Cryptography.CngKey tem demandas de permissão para SecurityPermissionFlag.UnmanagedCode. Começando com o .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 foram usados System.Security.Cryptography.Xml.EncryptedXml com êxito começaram a falhar e a lançar SecurityException exceções. Essa alteração adiciona as asserções necessárias para que todas as funções que usam o CngLightup tenham as permissões necessárias.

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
Âmbito Edge
Versão 4.6.2
Type Runtime

APIs afetadas

RSACng.VerifyHash agora retorna False para qualquer falha de verificação

Detalhes

Começando com o .NET Framework 4.6.2, esse método retorna False se a assinatura em si estiver mal formatada. Ele agora retorna false para qualquer falha de verificação. No .NET Framework 4.6 e 4.6.1, o método lança um System.Security.Cryptography.CryptographicException se a assinatura em si está mal formatada.

Sugestão

Qualquer código cuja execução depende da manipulação do deve ser executado se a System.Security.Cryptography.CryptographicException validação falhar e o método retornar False.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

Alterações de quebra de quebra de SignedXml e EncryptedXml

Detalhes

No .NET Framework 4.6.2, a segurança corrige e System.Security.Cryptography.Xml.SignedXmlSystem.Security.Cryptography.Xml.EncryptedXml leva a comportamentos diferentes em tempo de execução. Por exemplo:

  • Se um documento tiver vários elementos com o mesmo id atributo e uma assinatura tiver como alvo um desses elementos como a raiz da assinatura, o documento será considerado inválido.
  • Documentos que usam algoritmos de transformação XPath não canônicos em referências agora são considerados inválidos.
  • Documentos que usam algoritmos de transformação XSLT não canônicos em referências agora são considerados inválidos.
  • Qualquer programa que faça uso de assinaturas separadas de recursos externos não poderá fazê-lo.

Sugestão

Os desenvolvedores podem querer rever o uso de XmlDsigXsltTransform e XmlDsigXsltTransform, bem como os tipos derivados, uma vez que um recetor de documento pode não ser capaz de Transform processá-lo.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

Windows Communication Foundation (WCF)

Remover Ssl3 do WCF TransportDefaults

Detalhes

Ao usar NetTcp com segurança de transporte e um tipo de credencial de certificado, o protocolo SSL 3 não é mais um protocolo padrão usado para negociar uma conexão segura. Na maioria dos casos, não deve haver impacto nos aplicativos existentes, pois o TLS 1.0 sempre foi incluído na lista de protocolos para NetTcp. Todos os clientes existentes devem ser capazes de negociar uma conexão usando pelo menos TLS1.0.

Sugestão

Se Ssl3 for necessário, use um dos seguintes mecanismos de configuração para adicionar Ssl3 à lista de protocolos negociados.

Nome Valor
Âmbito Edge
Versão 4.6.2
Type Runtime

APIs afetadas

Windows Presentation Foundation (WPF)

Alterar a propriedade IsEnabled do pai de um controle TextBlock afeta todos os controles filho

Detalhes

A partir do .NET Framework 4.6.2, alterar a System.Windows.UIElement.IsEnabled propriedade do pai de um System.Windows.Controls.TextBlock controle afeta todos os controles filho (como hiperlinks e botões) do System.Windows.Controls.TextBlock controle. No .NET Framework 4.6.1 e versões anteriores, os controles dentro de um System.Windows.Controls.TextBlock nem sempre refletiam o System.Windows.UIElement.IsEnabled estado da propriedade do System.Windows.Controls.TextBlock pai.

Sugestão

Nenhum. Essa alteração está em conformidade com o comportamento esperado para controles dentro de um System.Windows.Controls.TextBlock controle.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

CoerceIsSelectionBoxRealçado

Detalhes

Certas sequências de ações envolvendo um System.Windows.Controls.ComboBox e sua fonte de dados podem resultar em um System.NullReferenceExceptionarquivo .

Sugestão

Se possível, atualize para o .NET Framework 4.6.2.

Nome Valor
Âmbito Menor
Versão 4.6
Type Runtime

APIs afetadas

DataGridCellsPanel.BringIndexIntoView lança ArgumentOutOfRangeException

Detalhes

ScrollIntoView(Object) funcionará de forma assíncrona quando a virtualização de colunas estiver ativada, mas as larguras das colunas ainda não tiverem sido determinadas. Se as colunas forem removidas antes que o trabalho assíncrono aconteça, pode ocorrer um 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) tenha sido concluída.
Nome Valor
Âmbito Edge
Versão 4.6.2
Type Runtime

APIs afetadas

Rolagem horizontal e virtualização

Detalhes

Essa alteração se aplica a um System.Windows.Controls.ItemsControl que faz sua própria virtualização na direção ortogonal para a direção de rolagem principal (o exemplo principal é System.Windows.Controls.DataGrid com EnableColumnVirtualization="True"). O resultado de certas operações de rolagem horizontal foi alterado para produzir resultados mais intuitivos e mais análogos aos resultados de operações verticais comparáveis.

As operações incluem "Scroll Here" e "Right Edge", para usar os nomes do menu obtido clicando com o botão direito do mouse em uma barra de rolagem horizontal. Ambos calculam um deslocamento candidato e chamam SetHorizontalOffset(Double).

Depois de rolar para o novo deslocamento, a noção de "aqui" ou "borda direita" pode ter mudado porque o conteúdo recém-desvirtualizado alterou o valor de System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth.

Antes do .NET Framework 4.6.2, a operação de rolagem simplesmente usa o deslocamento candidato, mesmo que ele não esteja mais "aqui" ou na "borda direita". Isso resulta em efeitos como "saltar" o polegar de rolagem, melhor ilustrado pelo exemplo. Suponha que um System.Windows.Controls.DataGrid tem ExtentWidth=1000 e Width=200. Um scroll para "Right Edge" usa deslocamento candidato 1000 - 200 = 800. Ao rolar para esse deslocamento, novas colunas são desvirtualizadas; Vamos supor que eles são muito amplos, de modo que as System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth mudanças para 2000. A rolagem termina com HorizontalOffset=800, e o polegar "quica" de volta para perto do meio da barra de rolagem - precisamente em 800/2000 = 40%.

A mudança é recalcular um novo deslocamento candidato quando essa situação ocorrer e tentar novamente. (É assim que a rolagem vertical já funciona.)

A alteração produz uma experiência mais previsível e intuitiva para o usuário final, mas também pode afetar qualquer aplicativo que dependa do valor exato de System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset após uma rolagem horizontal, seja invocada pelo usuário final ou por uma chamada explícita para SetHorizontalOffset(Double).

Sugestão

Um aplicativo que usa um valor previsto para System.Windows.Controls.Primitives.IScrollInfo.HorizontalOffset deve ser alterado para buscar o valor real (e o valor de System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth) após qualquer rolagem horizontal que possa ser alterada System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth devido à desvirtualização.

Nome Valor
Âmbito Menor
Versão 4.6.2
Type Runtime

APIs afetadas

Items.Clear não remove duplicados de SelectedItems

Detalhes

Suponha que um Seletor (com a seleção múltipla habilitada) tenha duplicatas em sua System.Windows.Controls.Primitives.MultiSelector.SelectedItems coleção - o mesmo item aparece mais de uma vez. A remoção desses itens da fonte de dados (por exemplo, chamando Items.Clear) não consegue removê-los do System.Windows.Controls.Primitives.MultiSelector.SelectedItems; apenas a primeira instância é removida. Além disso, o uso subsequente de (por exemplo, SelectedItems.Clear()) pode encontrar problemas como System.ArgumentException, porque System.Windows.Controls.Primitives.MultiSelector.SelectedItems contém itens que não estão mais na fonte de System.Windows.Controls.Primitives.MultiSelector.SelectedItems dados.

Sugestão

Atualize, se possível, para o .NET Framework 4.6.2.

Nome Valor
Âmbito Menor
Versão 4,5
Type Runtime

APIs afetadas

Rolagem de itens em uma lista plana com itens de diferentes alturas de pixels

Detalhes

Quando um System.Windows.Controls.ItemsControl exibe uma coleção usando virtualização (IsVirtualizing=true) e rolagem de item (ScrollUnit=Item), e quando o controle rola para exibir um item cuja altura em pixels difere de seus vizinhos, o System.Windows.Controls.VirtualizingStackPanel itera sobre todos os itens da coleção. A interface do usuário não responde durante essa iteração. A iteração ocorre em outras circunstâncias, mesmo em versões anteriores do .NET Framework. Por exemplo, ocorre quando a rolagem de pixels (ScrollUnit=Pixel) ao encontrar um item com altura de pixel diferente e quando os dados hierárquicos de rolagem de item (como um System.Windows.Controls.TreeView ou um System.Windows.Controls.ItemsControl com agrupamento habilitado) ao encontrar um item com um número diferente de itens descendentes do que seus vizinhos. Para o caso de rolagem de item e altura de pixel diferente, a iteração foi introduzida no .NET Framework 4.6.1 para corrigir bugs no layout de dados hierárquicos. Não é necessário se os dados forem simples (sem hierarquia) e o .NET Framework 4.6.2 não o fizer nesse caso.

Sugestão

Se a iteração ocorrer no .NET Framework 4.6.1, mas não em versões anteriores - ou seja, se o System.Windows.Controls.ItemsControl item estiver rolando uma lista plana com itens de altura de pixel diferente - há duas soluções:

  • Instale o .NET Framework 4.6.2.
  • Instale o hotfix HR 1605 para .NET Framework 4.6.1.
Nome Valor
Âmbito Menor
Versão 4.6.1
Type Runtime

APIs afetadas

O plano de fundo do RibbonGroup é definido como transparente em compilações localizadas

Detalhes

System.Windows.Controls.Ribbon.RibbonGroup o plano de fundo em compilações localizadas sempre foi pintado com pincel transparente, resultando em uma experiência de interface do usuário ruim. Isso é corrigido na correção do WPF do .NET Framework 4.7 atualizando os recursos localizados para System.Windows.Controls.Ribbon.RibbonGroupo , o que, por sua vez, garante que o pincel correto seja selecionado.

Sugestão

Atualizar para o .NET Framework 4.7

Nome Valor
Âmbito Edge
Versão 4.6.2
Type Runtime

APIs afetadas

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

A verificação ortográfica do WPF falha de maneiras inesperadas

Detalhes

Isso inclui uma série de problemas do Corretor Ortográfico do WPF:

  • WPF Corretor Ortográfico às vezes lança System.Runtime.InteropServices.COMException
  • WPF Corretor ortográfico falha com UnauthorizedAccessException quando os aplicativos são iniciados usando 'executar como usuário diferente'
  • O Corretor Ortográfico do WPF identifica incorretamente erros ortográficos em palavras compostas como 'Hausnummer' em alemão.

Sugestão

Problema #1 - Isso foi corrigido no .NET Framework 4.6.2 Problema #2 - O Corretor Ortográfico do WPF não é mais suportado quando os aplicativos são iniciados usando 'executar como usuário diferente'. A partir do .NET Framework 4.6.2, os aplicativos iniciados dessa maneira não falharão mais inesperadamente - em vez disso, o Corretor Ortográfico será desativado silenciosamente. Problema #3 - Isso foi corrigido no .NET Framework 4.6.2.

Nome Valor
Âmbito Edge
Versão 4.6.1
Type Runtime

APIs afetadas

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