Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 podem disparar o evento PageIndexChanging ao sair da última página da visualização.
Detalhes
Um bug no .NET Framework 4.5 faz com que System.Web.UI.WebControls.GridView.PageIndexChanging às vezes não seja acionado para System.Web.UI.WebControls.GridViews que habilitaram System.Web.UI.WebControls.GridView.AllowCustomPaging.
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, a aplicação pode fazer uma ligação explícita BindGrid a qualquer Page_Load que satisfaça estas condições (System.Web.UI.WebControls.GridView está na última página e LastSystem.Web.UI.WebControls.GridView.PageSize é 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 de aplicação | Menor |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
Núcleo
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 de aplicação | Menor |
| Versão | 4.5.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.
AppDomainSetup.DynamicBase não é mais aleatorizado pelo UseRandomizedStringHashAlgorithm
Detalhes
Antes do .NET Framework 4.6, o valor de DynamicBase seria randomizado entre domínios de aplicativo ou entre processos, se UseRandomizedStringHashAlgorithm estivesse habilitado no arquivo de 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 aleatorizado. 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 de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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, ao chamar GetCustomAttribute(s) numa propriedade de indexador que diferia de outra propriedade apenas pelo tipo do índice, resultaria num System.Reflection.AmbiguousMatchException. 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 de System.Reflection.AmbiguousMatchException, a reflexão agora deve ser usada para procurar explicitamente vários indexadores.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 de aplicação | Menor |
| Versão | 4.5.1 |
| Tipo | Tempo de execução |
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 este problema, substitua as chamadas para EnableEvents(EventSource, EventLevel) por 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 de aplicação | Borda |
| Versão | 4,5 |
| Tipo | Tempo de execução |
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 de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 do objeto retornam E_NOINTERFACE.
Sugestão
Atualize o código de marshalling para funcionar com objetos sem utilizar reflexão.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 o domínio padrão da aplicação não é mais definido como null se não estiver configurado.
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 terá um valor padrão de 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 de que TargetFrameworkName seja definido como null por padrão. Se for necessário que essa propriedade continue a ser avaliada como null, ela poderá ser explicitamente definida como esse valor.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 de X509Certificate2.ToString(Boolean) deve 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 anteriormente teria lançado uma exceção.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
APIs afetadas
Dados
A tentativa de estabelecer uma conexão TCP/IP com uma base de dados do SQL Server que resulta em 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 se resolve para localhost falha com o erro: "Ocorreu um erro relacionado à rede ou à instância específica durante o estabelecimento de uma conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexõ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 ligar a um banco de dados do SQL Server que resolve para localhost, atualize para o .NET Framework 4.6.2.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.
Depurador de código
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 pelo depurador fará com que o valor da variável 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 de aplicação | Borda |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.
Ligação em rede
ContentDisposition DateTimes retorna uma cadeia de caracteres ligeiramente diferente
Detalhes
As representações em forma de texto de System.Net.Mime.ContentDisposition foram atualizadas na versão 4.6 para representar sempre o componente de hora de System.DateTime com dois dígitos. Isto é para cumprir com RFC822 e RFC2822. Isso faz com que ToString() retorne um texto ligeiramente diferente na versão 4.6 em situações onde um dos elementos temporais da configuração fosse anterior às 10h00. Observe que ContentDispositions por vezes são serializados através da conversão em cadeias de caracteres, portanto, quaisquer operações, serialização ou chamadas para 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 de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
APIs afetadas
Serialização
A mensagem de exceção foi alterada devido a uma falha na serialização de 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 de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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
Versionentrada naHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Fullchave foi alterado para4.6.xxxxxno .NET Framework 4.6 e nas suas atualizações pontuais e para4.7.xxxxxno .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 e AssemblyInformationalVersionAttribute atributos para assemblies geridos 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 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 valor da entrada
InstallPathna chaveHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
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 de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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.
Advertência
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.
Advertência
Esta solução alternativa não é recomendada, uma vez que um certificado com o algoritmo de hash MD5 é considerado inseguro.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.
Windows Presentation Foundation (WPF)
Aceder aos itens selecionados de um WPF DataGrid a partir 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 eventos de DataGrid que envolvem a remoção de uma linha podem fazer com que um System.NullReferenceException seja lançado se acessarem as propriedades DataGrid ou System.Windows.Controls.Primitives.Selector.SelectedItem do System.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 de aplicação | Menor |
| Versão | 4,5 |
| Tipo | Tempo de execução |
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 há itens selecionados em um System.Windows.Controls.ListBox pode resultar na duplicação dos itens selecionados 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.
| Valor | |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
CoerceIsSelectionBoxRealçado
Detalhes
Certas sequências de ações envolvendo um System.Windows.Controls.ComboBox e a sua fonte de dados podem resultar em um System.NullReferenceException.
Sugestão
Se possível, atualize para o .NET Framework 4.6.2.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
APIs afetadas
ListBoxItem IsSelected problema de ligação com ObservableCollection<T>.Move
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 de aplicação | Menor |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
Clicar com o botão direito do mouse num cabeçalho de linha do DataGrid WPF modifica a seleção do DataGrid.
Detalhes
Clicar com o botão direito do mouse num cabeçalho de linha System.Windows.Controls.DataGrid enquanto várias linhas estão selecionadas faz com que a seleção de System.Windows.Controls.DataGrid 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 de aplicação | Borda |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
WPF gera um processo de wisptis.exe que pode congelar o mouse
Detalhes
Foi introduzido um problema na versão 4.5.2 que causa wisptis.exe a ser gerado, o 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 de aplicação | Maior |
| Versão | 4.5.2 |
| Tipo | Tempo de execução |
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 de aplicação | Borda |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 elemento <EnableMultiMonitorDisplayClipping> no <appSettings> no ficheiro de configuração de uma aplicação ou definindo a propriedade EnableMultiMonitorDisplayClipping na inicialização da aplicação.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 tratam String.IsNullOrEmpty como uma operação pura.
Detalhes
Para aplicações destinadas ao .NET Framework 4.6.1, se o contrato invariante para Contract.Invariant ou o contrato de pré-condição para Requires chamar o método String.IsNullOrEmpty, 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 de aplicação | Menor |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
APIs afetadas
Windows Presentation Foundation (WPF)
Deslizar itens em uma lista plana com itens de diferentes alturas em pixels
Detalhes
Quando um System.Windows.Controls.ItemsControl exibe uma coleção com virtualização (IsVirtualizing=true) e rolagem de itens (ScrollUnit=Item), o controlo rola para apresentar um item cuja altura em pixels difere dos seus vizinhos, e então o System.Windows.Controls.VirtualizingStackPanel percorre 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 o deslocamento de pixels (ScrollUnit=Pixel) se depara com um item de altura de pixel diferente. Além disso, quando ocorre a rolagem de itens em dados hierárquicos (como um System.Windows.Controls.TreeView ou um System.Windows.Controls.ItemsControl com agrupamento habilitado) ao encontrar um item com um número de descendentes diferente comparado com os seus vizinhos. No caso de rolagem de itens 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 estiver a fazer scroll numa lista plana cujos itens têm altura de pixel variável - existem duas soluções:
- Instale o .NET Framework 4.6.2.
- Instale o hotfix HR 1605 para .NET Framework 4.6.1.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
APIs afetadas
ObjectDisposedException lançada pelo corretor ortográfico do 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 oportunidade continuariam a ser observadas em aplicações executadas num depurador.
Sugestão
Atualizar para o .NET Framework 4.7
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Borda |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
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 Verificador Ortográfico às vezes gera System.Runtime.InteropServices.COMException
- WPF Corretor ortográfico falha com UnauthorizedAccessException quando as aplicações são iniciadas usando 'executar como um utilizador 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 de aplicação | Borda |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.
.NET Framework 4.6.2
Dados
A tentativa de estabelecer uma conexão TCP/IP com uma base de dados do SQL Server que resulta em 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 se resolve para localhost falha com o erro: "Ocorreu um erro relacionado à rede ou à instância específica durante o estabelecimento de uma conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexõ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 ligar a um banco de dados do SQL Server que resolve para localhost, atualize para o .NET Framework 4.6.2.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 em cache o erro e o relança 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, você pode configurar o período de bloqueio do pool de conexões 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 tomar qualquer um dos três valores:
Você pode restaurar o comportamento anterior definindo a System.Data.SqlClient.SqlConnectionStringBuilder.PoolBlockingPeriod propriedade como AlwaysBlock.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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 de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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. Estes incluem P/Invokes sem declarar SecurityPermissionFlag.UnmanagedCode permissões e caminhos de código onde System.Security.Cryptography.CngKey exige permissões 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, as aplicações de confiança parcial que usaram System.Security.Cryptography.Xml.EncryptedXml com sucesso começaram a falhar e a lançar exceções SecurityException. Esta alteração adiciona as asserções necessárias para que todas as funções que utilizam o CngLightup disponham das permissões requeridas.
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 de aplicação | Borda |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
- DSACng(CngKey)
- DSACng.Key
- DSACng.LegalKeySizes
- DSACng.CreateSignature(Byte[])
- DSACng.VerifySignature(Byte[], Byte[])
- RSACng(CngKey)
- RSACng.Key
- RSACng.Decrypt(Byte[], RSAEncryptionPadding)
- RSACng.SignHash(Byte[], HashAlgorithmName, RSASignaturePadding)
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 dependa da manipulação de System.Security.Cryptography.CryptographicException, em vez disso, deve ser executado se a validação falhar e o método retornar False.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
Alterações importantes em SignedXml e EncryptedXml
Detalhes
No .NET Framework 4.6.2, as correções de segurança em System.Security.Cryptography.Xml.SignedXml e System.Security.Cryptography.Xml.EncryptedXml levam a diferentes comportamentos em tempo de execução. Por exemplo:
- Se um documento tiver vários elementos com o mesmo
idatributo 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 de Transform, uma vez que um recetor de documento pode não ser capaz de processá-lo.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
- System.Security.Cryptography.Xml.Transform
- System.Security.Cryptography.Xml.XmlDsigXPathTransform
- System.Security.Cryptography.Xml.XmlDsigXsltTransform
Windows Communication Foundation (WCF)
Remover o protocolo Ssl3 dos padrões de transporte do WCF
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 de aplicação | Borda |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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 propriedade System.Windows.UIElement.IsEnabled do progenitor de um controlo System.Windows.Controls.TextBlock afeta quaisquer controlos filho (como hiperlinks e botões) do controlo System.Windows.Controls.TextBlock. No .NET Framework 4.6.1 e nas versões anteriores, os controlos dentro de um System.Windows.Controls.TextBlock nem sempre refletiam o estado da propriedade System.Windows.UIElement.IsEnabled do progenitor System.Windows.Controls.TextBlock.
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 de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
APIs afetadas
CoerceIsSelectionBoxRealçado
Detalhes
Certas sequências de ações envolvendo um System.Windows.Controls.ComboBox e a sua fonte de dados podem resultar em um System.NullReferenceException.
Sugestão
Se possível, atualize para o .NET Framework 4.6.2.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6 |
| Tipo | Tempo de execução |
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 de aplicação | Borda |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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 não virtual recém-adicionado 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 "o polegar da barra de rolagem saltando", como ilustrado no exemplo. Suponha que um System.Windows.Controls.DataGrid tem ExtentWidth=1000 e Width=200. Um scroll até "Borda Direita" utiliza um deslocamento candidato de 1000 - 200 = 800. Ao rolar para esse deslocamento, novas colunas são desvirtualizadas; Vamos supor que elas são muito amplas, fazendo com que o System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth mude para 2000. A rolagem termina com HorizontalOffset=800, e o botão deslizante "retorna" 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 alterar System.Windows.Controls.Primitives.IScrollInfo.ExtentWidth devido à desvirtualização.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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 System.Windows.Controls.Primitives.MultiSelector.SelectedItems (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 dados.
Sugestão
Atualize, se possível, para o .NET Framework 4.6.2.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4,5 |
| Tipo | Tempo de execução |
APIs afetadas
Deslizar itens em uma lista plana com itens de diferentes alturas em pixels
Detalhes
Quando um System.Windows.Controls.ItemsControl exibe uma coleção com virtualização (IsVirtualizing=true) e rolagem de itens (ScrollUnit=Item), o controlo rola para apresentar um item cuja altura em pixels difere dos seus vizinhos, e então o System.Windows.Controls.VirtualizingStackPanel percorre 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 o deslocamento de pixels (ScrollUnit=Pixel) se depara com um item de altura de pixel diferente. Além disso, quando ocorre a rolagem de itens em dados hierárquicos (como um System.Windows.Controls.TreeView ou um System.Windows.Controls.ItemsControl com agrupamento habilitado) ao encontrar um item com um número de descendentes diferente comparado com os seus vizinhos. No caso de rolagem de itens 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 estiver a fazer scroll numa lista plana cujos itens têm altura de pixel variável - existem duas soluções:
- Instale o .NET Framework 4.6.2.
- Instale o hotfix HR 1605 para .NET Framework 4.6.1.
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Menor |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
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. Foi corrigido na atualização do WPF do .NET Framework 4.7 ao atualizar os recursos localizados para System.Windows.Controls.Ribbon.RibbonGroup, o que, por sua vez, garante que o pincel correto seja selecionado.
Sugestão
Atualizar para o .NET Framework 4.7
| Nome | Valor |
|---|---|
| Âmbito de aplicação | Borda |
| Versão | 4.6.2 |
| Tipo | Tempo de execução |
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 Verificador Ortográfico às vezes gera System.Runtime.InteropServices.COMException
- WPF Corretor ortográfico falha com UnauthorizedAccessException quando as aplicações são iniciadas usando 'executar como um utilizador 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 de aplicação | Borda |
| Versão | 4.6.1 |
| Tipo | Tempo de execução |
APIs afetadas
Não detetável através da análise API.