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
- Attribute.GetCustomAttribute(MemberInfo, Type)
- Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)
- Attribute.GetCustomAttributes(MemberInfo)
- Attribute.GetCustomAttributes(MemberInfo, Boolean)
- Attribute.GetCustomAttributes(MemberInfo, Type)
- Attribute.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttribute(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttribute<T>(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Boolean)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type)
- CustomAttributeExtensions.GetCustomAttributes(MemberInfo, Type, Boolean)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo)
- CustomAttributeExtensions.GetCustomAttributes<T>(MemberInfo, Boolean)
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:
- System.Reflection.Assembly
- System.Reflection.MemberInfo (e seus tipos derivados, incluindo System.Reflection.FieldInfo, System.Reflection.MethodInfo, System.Type, e System.Reflection.TypeInfo)
- System.Reflection.MethodBody
- System.Reflection.Module
- System.Reflection.ParameterInfo
Chamadas para IMarshal
o retorno E_NOINTERFACE
do 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
- System.Reflection.Assembly
- System.Reflection.FieldInfo
- System.Reflection.MemberInfo
- System.Reflection.MethodBody
- System.Reflection.MethodInfo
- System.Reflection.Module
- System.Reflection.ParameterInfo
- System.Reflection.TypeInfo
- System.Type
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
- DataContractJsonSerializer(Type)
- DataContractJsonSerializer(Type, IEnumerable<Type>)
- DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
- DataContractJsonSerializer(Type, String)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>)
- DataContractJsonSerializer(Type, XmlDictionaryString)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>)
- DataContractJsonSerializer(Type, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, String, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractJsonSerializer(Type, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, IDataContractSurrogate, Boolean)
- DataContractSerializer(Type)
- DataContractSerializer(Type, DataContractSerializerSettings)
- DataContractSerializer(Type, IEnumerable<Type>)
- DataContractSerializer(Type, String, String)
- DataContractSerializer(Type, String, String, IEnumerable<Type>)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)
- DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)
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 naHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
chave foi alterado para4.6.xxxxx
o .NET Framework 4.6 e suas versões pontuais e para4.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 formato4.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.42000
de 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 formato4.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:
- Para detetar a versão de tempo de execução do .NET Framework, consulte Como: Determinar quais versões do .NET Framework estão instaladas.
- Para determinar o caminho de instalação para o .NET Framework, use o
InstallPath
valor da entrada naHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
chave.
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>
- Se a associação estiver configurada dinamicamente no código-fonte, atualize a TcpTransportSecurity.SslProtocols propriedade para usar TLS 1.1 (SslProtocols.Tls11 ou uma versão anterior do protocolo no código-fonte.
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
- Char.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(Char)
- CharUnicodeInfo.GetUnicodeCategory(String, Int32)
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
- 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)
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
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
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.