Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
O .NET Framework é atendido independentemente das atualizações do Windows com correções de bugs de segurança e confiabilidade. Em geral, as atualizações de segurança são lançadas trimestralmente. O .NET Framework continuará a ser incluído no Windows, sem planos para removê-lo. Você não precisa migrar seus aplicativos do .NET Framework, mas, para um novo desenvolvimento, use o .NET em vez do .NET Framework.
Este artigo resume os principais novos recursos e melhorias nas seguintes versões do .NET Framework:
- .NET Framework 4.8.1
- .NET Framework 4.8
- .NET Framework 4.7.2
- .NET Framework 4.7.1
- .NET Framework 4.7
- .NET Framework 4.6.2
- .NET Framework 4.6.1
- .NET 2015 e .NET Framework 4.6
- .NET Framework 4.5.2
- .NET Framework 4.5.1
- .NET Framework 4.5
Este artigo não fornece informações abrangentes sobre cada novo recurso e está sujeito a alterações. Para obter informações gerais sobre o .NET Framework, consulte Introdução. Para plataformas com suporte, consulte Os Requisitos do Sistema. Para obter links de download e instruções de instalação, consulte o Guia de Instalação.
Observação
A equipe do .NET Framework também libera recursos fora da banda, usando o NuGet, para expandir o suporte à plataforma e introduzir novas funcionalidades, como coleções imutáveis e tipos de vetor habilitados para SIMD. Para obter mais informações, consulte Bibliotecas de Classes adicionais e APIs e versões fora de banda e do .NET Framework. Confira uma lista completa de pacotes NuGet para .NET Framework.
Apresentando o .NET Framework 4.8.1
O .NET Framework 4.8.1 baseia-se em versões anteriores do .NET Framework 4.x adicionando muitas correções novas e vários novos recursos, mantendo-se um produto muito estável.
Baixar e instalar o .NET Framework 4.8.1
Você pode baixar o .NET Framework 4.8.1 nos seguintes locais:
O .NET Framework 4.8 pode ser instalado no Windows 11, Windows 10 versão 21H2, Windows 10 versão 21H1, Windows 10 versão 20H2 e nas plataformas de servidor correspondentes a partir do Windows Server 2022. Você pode instalar o .NET Framework 4.8.1 usando o instalador da Web ou o instalador offline. A maneira recomendada para a maioria dos usuários é usar o instalador da Web.
Você pode direcionar o .NET Framework 4.8.1 no Visual Studio 2022 17.3 ou posterior instalando o Pacote de Desenvolvedores do .NET Framework 4.8.1.
Novidades no .NET Framework 4.8.1
O .NET Framework 4.8.1 apresenta novos recursos nas seguintes áreas:
- Suporte nativo para Arm64
- Dicas de ferramentas acessíveis compatíveis com WCAG2.1
- Windows Forms – Melhorias de acessibilidade
A acessibilidade aprimorada, que permite que um aplicativo forneça uma experiência apropriada para os usuários da Tecnologia Assistencial, é um dos principais focos do .NET Framework 4.8.1. Para obter informações sobre melhorias de acessibilidade no .NET Framework 4.8.1, confira as novidades na acessibilidade no .NET Framework.
O .NET Framework 4.8.1 adiciona suporte nativo do Arm64 à família .NET Framework. Portanto, seus investimentos no vasto ecossistema de aplicativos e bibliotecas do .NET Framework agora podem aproveitar os benefícios da execução de cargas de trabalho nativamente no Arm64, ou seja, melhor desempenho em comparação com a execução de código x64 emulado no Arm64.
A Microsoft tem o compromisso de fornecer produtos e plataformas acessíveis a todos. O .NET Framework 4.8.1 oferece duas plataformas de desenvolvimento de interface do usuário do Windows, ambas fornecendo aos desenvolvedores o suporte necessário para criar aplicativos acessíveis. Nas últimas várias versões, os Windows Forms e o WPF adicionaram novos recursos e corrigiram vários problemas de confiabilidade relacionados à acessibilidade. Você pode ler mais sobre os detalhes do que foi corrigido ou adicionado em cada versão visitando as novidades na acessibilidade no .NET Framework.
Nesta versão, os Windows Forms e o WPF fizeram melhorias no tratamento de dicas de ferramentas para torná-los mais acessíveis. Em ambos os casos, as dicas de ferramenta agora estão em conformidade com as diretrizes definidas no conteúdo do WCAG2.1 nas diretrizes Hover ou Focus . Os requisitos para dicas de ferramenta são:
- As dicas de ferramenta devem ser exibidas por meio do mouse ou da navegação por teclado para o controle.
- As dicas de ferramenta devem ser dispensáveis. Ou seja, um comando de teclado simples como o Esc deve ignorar a dica de ferramenta.
- As dicas de ferramenta devem ser focalizáveis. Os usuários devem ser capazes de colocar o cursor do mouse sobre a dica de ferramenta. Isso permite que cenários como o uso da lupa possam ler a dica de ferramenta para usuários de baixa visão.
- As dicas de ferramenta devem ser persistentes. As dicas de ferramenta não devem desaparecer automaticamente depois que um determinado período de tempo tiver decorrido. Em vez disso, as dicas de ferramenta devem ser ignoradas pelo usuário movendo o mouse para outro controle ou por um comando de teclado.
No Windows Forms, esse suporte só está disponível em sistemas operacionais Windows 11 ou posteriores. O Windows Forms é um wrapper gerenciado fino em torno da API do Windows e o novo comportamento da dica de ferramenta só ficou disponível no Windows 11. O WPF não tem dependências de versão do sistema operacional para suas dicas de ferramentas acessíveis.
O WPF implementou a maioria dos requisitos para dicas de ferramentas compatíveis com WCAG2.1 no .NET Framework 4.8. Nesta versão, o WPF melhorou a experiência garantindo que uma dica de ferramenta na janela atual possa ser facilmente descartada usando a chave Esc , a tecla Ctrl (por si só) ou pela combinação Ctrl+Shift+F10. O escopo da chave de escape foi reduzido nesta versão para aplicar somente à janela atual. Anteriormente, ele se aplicava a qualquer dica de ferramenta aberta no aplicativo.
O Windows Forms foi a primeira pilha de interface do usuário do Windows criada para o .NET Framework. Dessa forma, ele foi criado originalmente para utilizar a tecnologia de acessibilidade herdada, que não atende aos requisitos atuais de acessibilidade. Nesta versão, o Windows Forms resolveu vários problemas. Para obter uma lista completa das alterações relacionadas à acessibilidade, visite as novidades na acessibilidade no .NET Framework.
Os destaques das melhorias do Windows Forms no .NET Framework 4.8.1 são:
Suporte a padrões de texto– o Windows Forms adicionou suporte para o Padrão de Texto do UIA. Esse padrão permite que a tecnologia adaptativa percorra o conteúdo de um TextBox ou de uma letra de controle baseada em texto semelhante por letra. Ele permite que o texto seja selecionado dentro do controle e alterado e o novo texto seja inserido no cursor. O Windows Forms adicionou esse suporte para células TextBox, DataGridView, controles ComboBox e muito mais.
Resolver problemas de contraste: em vários controles, o Windows Forms alterou a taxa de contraste dos retângulos de seleção para mais escuro e mais visível.
Correção de vários problemas do DataGridView:
- Os nomes da barra de rolagem foram atualizados para serem consistentes.
- Agora, o Narrador pode se concentrar em células DataGridView vazias.
- Os desenvolvedores podem definir a propriedade de tipo de controle localizado para células DataGridView Personalizadas.
- A cor do link para células DataGridViewLink foi atualizada para ter melhor contraste com a tela de fundo.
Apresentando o .NET Framework 4.8
O .NET Framework 4.8 se baseia em versões anteriores do .NET Framework 4.x adicionando muitas correções novas e vários novos recursos, mantendo-se um produto muito estável.
Baixar e instalar o .NET Framework 4.8
Você pode baixar o .NET Framework 4.8 nos seguintes locais:
O .NET Framework 4.8 pode ser instalado no Windows 10, Windows 8.1, Windows 7 SP1 e nas plataformas de servidor correspondentes a partir do Windows Server 2008 R2 SP1. Você pode instalar o .NET Framework 4.8 usando o instalador da Web ou o instalador offline. A maneira recomendada para a maioria dos usuários é usar o instalador da Web.
Você pode direcionar o .NET Framework 4.8 no Visual Studio 2012 ou posterior instalando o Pacote de Desenvolvedores do .NET Framework 4.8.
Novidades no .NET Framework 4.8
O .NET Framework 4.8 apresenta novos recursos nas seguintes áreas:
- Classes base
- Windows Communication Foundation (WCF)
- WPF (Windows Presentation Foundation)
- Common Language Runtime
A acessibilidade aprimorada, que permite que um aplicativo forneça uma experiência apropriada para os usuários da Tecnologia Adaptativa, continua sendo um foco principal do .NET Framework 4.8. Para obter informações sobre melhorias de acessibilidade no .NET Framework 4.8, confira as novidades na acessibilidade no .NET Framework.
Classes base
Redução do impacto fips na criptografia. Nas versões anteriores do .NET Framework, classes de provedor criptográfico gerenciadas, como SHA256Managed gerar um CryptographicException quando as bibliotecas criptográficas do sistema são configuradas no "modo FIPS". Essas exceções são geradas porque as versões gerenciadas das classes de provedor criptográfico, ao contrário das bibliotecas criptográficas do sistema, não foram submetidas à certificação FIPS (Federal Information Processing Standards) 140-2. Como poucos desenvolvedores têm seus computadores de desenvolvimento no modo FIPS, as exceções geralmente são geradas em sistemas de produção.
Por padrão, em aplicativos destinados ao .NET Framework 4.8, as seguintes classes de criptografia gerenciada não lançam mais um CryptographicException neste caso:
- MD5Cng
- MD5CryptoServiceProvider
- RC2CryptoServiceProvider
- RijndaelManaged
- RIPEMD160Managed
- SHA256Managed
Em vez disso, essas classes redirecionam operações criptográficas para uma biblioteca de criptografia do sistema. Essa alteração efetivamente remove uma diferença potencialmente confusa entre ambientes de desenvolvedor e ambientes de produção e faz com que componentes nativos e componentes gerenciados operem na mesma política criptográfica. Aplicativos que dependem dessas exceções podem restaurar o comportamento anterior definindo a opção Switch.System.Security.Cryptography.UseLegacyFipsThrow AppContext como true. Para obter mais informações, consulte As classes de criptografia gerenciada não lançam uma CryptographyException no modo FIPS.
Uso da versão atualizada do ZLib
A partir do .NET Framework 4.5, o assembly clrcompression.dll usa o ZLib, uma biblioteca externa nativa para compactação de dados, a fim de fornecer uma implementação para o algoritmo deflate. A versão do .NET Framework 4.8 do clrcompression.dll é atualizada para usar o ZLib Versão 1.2.11, que inclui vários aprimoramentos e correções importantes.
Windows Communication Foundation (WCF)
Introdução ao ServiceHealthBehavior
Os pontos de extremidade de integridade são amplamente usados por ferramentas de orquestração para gerenciar serviços com base em seu status de integridade. As verificações de integridade também podem ser usadas pelas ferramentas de monitoramento para acompanhar e fornecer notificações sobre a disponibilidade e o desempenho de um serviço.
ServiceHealthBehavior é um comportamento de serviço WCF que se estende IServiceBehavior. Quando adicionado à ServiceDescription.Behaviors coleção, um comportamento de serviço faz o seguinte:
Retorna o status de integridade do serviço com códigos de resposta HTTP. Você pode especificar em uma cadeia de caracteres de consulta o código de status HTTP para uma solicitação de investigação de integridade HTTP/GET.
Publica informações sobre a integridade do serviço. Detalhes específicos do serviço, incluindo estado de serviço, contagens de limitação e capacidade podem ser exibidos usando uma solicitação HTTP/GET com a
?healthcadeia de caracteres de consulta. A facilidade de acesso a essas informações é importante ao solucionar problemas de um serviço WCF mal comportado.
Há duas maneiras de expor o ponto de extremidade de integridade e publicar informações de integridade do serviço WCF:
Por meio do código. Por exemplo:
ServiceHost host = new ServiceHost(typeof(Service1), new Uri("http://contoso:81/Service1")); ServiceHealthBehavior healthBehavior = host.Description.Behaviors.Find<ServiceHealthBehavior>(); healthBehavior ??= new ServiceHealthBehavior(); host.Description.Behaviors.Add(healthBehavior);Dim host As New ServiceHost(GetType(Service1), New Uri("http://contoso:81/Service1")) Dim healthBehavior As ServiceHealthBehavior = host.Description.Behaviors.Find(Of ServiceHealthBehavior)() If healthBehavior Is Nothing Then healthBehavior = New ServiceHealthBehavior() End If host.Description.Behaviors.Add(healthBehavior)Usando um arquivo de configuração. Por exemplo:
<behaviors> <serviceBehaviors> <behavior name="DefaultBehavior"> <serviceHealth httpsGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors>
O status de integridade de um serviço pode ser consultado usando parâmetros de consulta, como OnServiceFailure, OnDispatcherFailure, OnListenerFailuree OnThrottlePercentExceededum código de resposta HTTP pode ser especificado para cada parâmetro de consulta. Se o código de resposta HTTP for omitido para um parâmetro de consulta, um código de resposta HTTP 503 será usado por padrão. Por exemplo:
OnServiceFailure:
https://contoso:81/Service1?health&OnServiceFailure=450Um código de status de resposta HTTP 450 é retornado quando ServiceHost.State é maior que CommunicationState.Opened.
Parâmetros e exemplos de consulta:
OnDispatcherFailure:
https://contoso:81/Service1?health&OnDispatcherFailure=455Um código de status de resposta HTTP 455 é retornado quando o estado de qualquer um dos dispatchers de canal é maior que CommunicationState.Opened.
OnListenerFailure:
https://contoso:81/Service1?health&OnListenerFailure=465Um código de status de resposta HTTP 465 é retornado quando o estado de qualquer um dos ouvintes de canal é maior que CommunicationState.Opened.
OnThrottlePercentExceeded:
https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500Especifica a porcentagem {1 – 100} que dispara a resposta e seu código de resposta HTTP {200 – 599}. Neste exemplo:
Se a porcentagem for maior que 95, um código de resposta HTTP de 500 será retornado.
Se o percentual estiver entre 70 e 95, 350 serão retornados.
Caso contrário, 200 serão retornados.
O status de integridade do serviço pode ser exibido em HTML especificando uma cadeia de caracteres de consulta como https://contoso:81/Service1?health ou em XML especificando uma cadeia de caracteres de consulta como https://contoso:81/Service1?health&Xml. Uma cadeia de caracteres de consulta como https://contoso:81/Service1?health&NoContent retorna uma página HTML vazia.
Windows Presentation Foundation (WPF)
Aprimoramentos altos do DPI
No .NET Framework 4.8, o WPF adiciona suporte para Per-Monitor Reconhecimento de DPI V2 e dimensionamento de DPI Mixed-Mode. Consulte o Desenvolvimento de Aplicativos da Área de Trabalho de Alta DPI no Windows para obter informações adicionais sobre o alto desenvolvimento de DPI.
O .NET Framework 4.8 melhora o suporte para a interoperação HWNDs e Windows Forms hospedadas em High-DPI aplicativos WPF em plataformas que dão suporte ao dimensionamento de DPI Mixed-Mode (começando com o Windows 10 April 2018 Update). Quando HWNDs hospedados ou controles do Windows Forms são criados como Mixed-Mode janelas dimensionadas por DPI chamando SetThreadDpiHostingBehavior e SetThreadDpiAwarenessContext, eles podem ser hospedados em um aplicativo WPF Per-Monitor V2 e são dimensionados e dimensionados adequadamente. Esse conteúdo hospedado não é renderizado no DPI nativo; Em vez disso, o sistema operacional dimensiona o conteúdo hospedado para o tamanho apropriado. O suporte para Per-Monitor modo de reconhecimento de DPI v2 também permite que controles WPF sejam hospedados (ou seja, pai) em uma janela nativa em um aplicativo de alta DPI.
Para habilitar o suporte para Mixed-Mode alto dimensionamento de DPI, você pode definir o appContext a seguir alternando o arquivo de configuração do aplicativo:
<runtime>
<AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>
Common Language Runtime
O runtime no .NET Framework 4.8 inclui as seguintes alterações e melhorias:
Melhorias no compilador JIT. O compilador just-in-time (JIT) no .NET Framework 4.8 é baseado no compilador JIT no .NET Core 2.1. Muitas das otimizações e todas as correções de bug feitas no compilador JIT do .NET Core 2.1 estão incluídas no compilador JIT do .NET Framework 4.8.
Melhorias de NGEN. O runtime melhorou seu gerenciamento de memória para imagens NGEN ( Native Image Generator ) para que os dados mapeados de imagens NGEN não sejam residentes em memória. Isso reduz a área de superfície disponível para ataques que tentam executar código arbitrário modificando a memória que será executada.
Verificação antimalware para todos os assemblies. Nas versões anteriores do .NET Framework, o runtime verifica todos os assemblies carregados do disco usando o Windows Defender ou software antimalware de terceiros. No entanto, os assemblies carregados de outras fontes, como pelo Assembly.Load(Byte[]) método, não são verificados e podem conter malware não detectado. A partir do .NET Framework 4.8 em execução no Windows 10, o runtime dispara uma verificação por soluções antimalware que implementam a AMSI (Interface de Verificação Antimalware).
Novidades no .NET Framework 4.7.2
O .NET Framework 4.7.2 inclui novos recursos nas seguintes áreas:
Um foco contínuo no .NET Framework 4.7.2 é a acessibilidade aprimorada, o que permite que um aplicativo forneça uma experiência apropriada para os usuários da Tecnologia Assistencial. Para obter informações sobre melhorias de acessibilidade no .NET Framework 4.7.2, confira as novidades na acessibilidade no .NET Framework.
Classes base
O .NET Framework 4.7.2 apresenta um grande número de aprimoramentos criptográficos, melhor suporte de descompactação para arquivos ZIP e APIs de coleção adicionais.
Novas sobrecargas de RSA. Criar e DSA. Criar
Os DSA.Create(DSAParameters) métodos e RSA.Create(RSAParameters) os métodos permitem fornecer parâmetros de chave ao criar uma instância de uma chave ou RSA novaDSA. Eles permitem que você substitua o código da seguinte maneira:
// Before .NET Framework 4.7.2
using (RSA rsa = RSA.Create())
{
rsa.ImportParameters(rsaParameters);
// Other code to execute using the RSA instance.
}
' Before .NET Framework 4.7.2
Using rsa = RSA.Create()
rsa.ImportParameters(rsaParameters)
' Other code to execute using the rsa instance.
End Using
com código como este:
// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
// Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
' Other code to execute using the rsa instance.
End Using
Os DSA.Create(Int32) métodos e RSA.Create(Int32) permitem que você gere chaves ou RSA novas DSA com um tamanho de chave específico. Por exemplo:
using (DSA dsa = DSA.Create(2048))
{
// Other code to execute using the dsa instance.
}
Using dsa = DSA.Create(2048)
' Other code to execute using the dsa instance.
End Using
Construtores Rfc2898DeriveBytes aceitam um nome de algoritmo de hash
A Rfc2898DeriveBytes classe tem três novos construtores com um HashAlgorithmName parâmetro que identifica o algoritmo HMAC a ser usado ao derivar chaves. Em vez de usar SHA-1, os desenvolvedores devem usar um HMAC baseado em SHA-2, como SHA-256, conforme mostrado no exemplo a seguir:
private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
out HashAlgorithmName algorithm)
{
iterations = 100000;
algorithm = HashAlgorithmName.SHA256;
const int SaltSize = 32;
const int DerivedValueSize = 32;
using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
iterations, algorithm))
{
salt = pbkdf2.Salt;
return pbkdf2.GetBytes(DerivedValueSize);
}
}
Private Shared Function DeriveKey(password As String, ByRef iterations As Integer,
ByRef salt AS Byte(), ByRef algorithm As HashAlgorithmName) As Byte()
iterations = 100000
algorithm = HashAlgorithmName.SHA256
Const SaltSize As Integer = 32
Const DerivedValueSize As Integer = 32
Using pbkdf2 = New Rfc2898DeriveBytes(password, SaltSize, iterations, algorithm)
salt = pbkdf2.Salt
Return pbkdf2.GetBytes(DerivedValueSize)
End Using
End Function
Suporte para chaves efêmeras
A importação PFX pode, opcionalmente, carregar chaves privadas diretamente da memória, ignorando o disco rígido. Quando o novo X509KeyStorageFlags.EphemeralKeySet sinalizador for especificado em um X509Certificate2 construtor ou uma das sobrecargas do X509Certificate2.Import método, as chaves privadas serão carregadas como chaves efêmeras. Isso impede que as chaves fiquem visíveis no disco. Contudo:
Como as chaves não são mantidas no disco, os certificados carregados com esse sinalizador não são bons candidatos a serem adicionados a um X509Store.
As chaves carregadas dessa maneira são quase sempre carregadas por meio do CNG do Windows. Portanto, os chamadores devem acessar a chave privada chamando métodos de extensão, como certificado. GetRSAPrivateKey(). A X509Certificate2.PrivateKey propriedade não funciona.
Como a propriedade herdada X509Certificate2.PrivateKey não funciona com certificados, os desenvolvedores devem executar testes rigorosos antes de alternar para chaves efêmeras.
Criação programática de solicitações de assinatura de certificação PKCS nº 10 e certificados de chave pública X.509
A partir do .NET Framework 4.7.2, as cargas de trabalho podem gerar CSRs (solicitações de assinatura de certificado), o que permite que a geração de solicitações de certificado seja preparada para ferramentas existentes. Isso é frequentemente útil em cenários de teste.
Para obter mais informações e exemplos de código, consulte "Criação programática de solicitações de assinatura de certificação PKCS nº 10 e certificados de chave pública X.509" no blog do .NET.
Novos membros SignerInfo
A partir do .NET Framework 4.7.2, a SignerInfo classe expõe mais informações sobre a assinatura. Você pode recuperar o valor da System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm propriedade para determinar o algoritmo de assinatura usado pelo signatário. SignerInfo.GetSignature pode ser chamado para obter uma cópia da assinatura criptográfica para este signatário.
Deixando um fluxo encapsulado aberto após a eliminação do CryptoStream
A partir do .NET Framework 4.7.2, a CryptoStream classe tem um construtor adicional que permite Dispose não fechar o fluxo encapsulado. Para deixar o fluxo encapsulado aberto depois que a CryptoStream instância for descartada, chame o novo CryptoStream construtor da seguinte maneira:
var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)
Alterações de descompactação no DeflateStream
A partir do .NET Framework 4.7.2, a implementação de operações de descompactação na DeflateStream classe foi alterada para usar APIs nativas do Windows por padrão. Normalmente, isso resulta em uma melhora substancial no desempenho.
O suporte para descompactação usando APIs do Windows é habilitado por padrão para aplicativos direcionados ao .NET Framework 4.7.2. Aplicativos destinados a versões anteriores do .NET Framework, mas que estão em execução no .NET Framework 4.7.2, podem aceitar esse comportamento adicionando a seguinte opção AppContext ao arquivo de configuração do aplicativo:
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />
APIs de coleção adicionais
O .NET Framework 4.7.2 adiciona uma série de novas APIs aos tipos e HashSet<T> aos SortedSet<T> tipos. Elas incluem:
TryGetValuemétodos, que estendem o padrão try usado em outros tipos de coleção para esses dois tipos. Os métodos são:Enumerable.To*métodos de extensão, que convertem uma coleção em um HashSet<T>:Novos HashSet<T> construtores que permitem definir a capacidade da coleção, o que gera um benefício de desempenho quando você sabe o tamanho do HashSet<T> valor antecipado:
A ConcurrentDictionary<TKey,TValue> classe inclui novas sobrecargas e AddOrUpdateGetOrAdd métodos para recuperar um valor do dicionário ou adicioná-lo se ele não for encontrado e adicionar um valor ao dicionário ou atualizá-lo se ele já existir.
public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)
public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
Public AddOrUpdate(Of TArg)(key As TKey, addValueFactory As Func(Of TKey, TArg, TValue), updateValueFactory As Func(Of TKey, TValue, TArg, TValue), factoryArgument As TArg) As TValue
Public GetOrAdd(Of TArg)(key As TKey, valueFactory As Func(Of TKey, TArg, TValue), factoryArgument As TArg) As TValue
ASP.NET
Suporte para injeção de dependência no Web Forms
A DI (injeção de dependência) separa objetos e suas dependências para que o código de um objeto não precise mais ser alterado apenas porque uma dependência foi alterada. Ao desenvolver ASP.NET aplicativos direcionados ao .NET Framework 4.7.2, você pode:
Use injeção baseada em setter, baseada em interface e construtor em manipuladores e módulos, instâncias de página e controles de usuário de ASP.NET projetos de aplicativo Web.
Use injeção baseada em setter e interface em manipuladores e módulos, instâncias de página e controles de usuário de ASP.NET projetos do site.
Conecte diferentes estruturas de injeção de dependência.
Suporte para cookies do mesmo site
O SameSite impede que um navegador envie um cookie junto com uma solicitação entre sites. O .NET Framework 4.7.2 adiciona uma HttpCookie.SameSite propriedade cujo valor é um System.Web.SameSiteMode membro de enumeração. Se o valor for SameSiteMode.Strict ou SameSiteMode.LaxASP.NET adicionará o SameSite atributo ao cabeçalho set-cookie. O suporte ao SameSite aplica-se a HttpCookie objetos, bem como a cookies e System.Web.SessionState a FormsAuthentication eles.
Você pode definir SameSite para um HttpCookie objeto da seguinte maneira:
var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax
Você também pode configurar cookies SameSite no nível do aplicativo modificando o arquivo web.config:
<system.web>
<httpCookies sameSite="Strict" />
</system.web>
Você pode adicionar o SameSite para FormsAuthentication e System.Web.SessionState cookies modificando o arquivo de configuração da Web:
<system.web>
<authentication mode="Forms">
<forms cookieSameSite="Lax">
<!-- ... -->
</forms>
</authentication>
<sessionState cookieSameSite="Lax"></sessionState>
</system.web>
Rede
Implementação de propriedades HttpClientHandler
O .NET Framework 4.7.1 adicionou oito propriedades à System.Net.Http.HttpClientHandler classe. No entanto, dois jogaram um PlatformNotSupportedException. O .NET Framework 4.7.2 agora fornece uma implementação para essas propriedades. As propriedades são:
SQLClient
Suporte para autenticação universal e autenticação multifator do Azure Active Directory
Demandas crescentes de conformidade e segurança exigem que muitos clientes usem a MFA (autenticação multifator). Além disso, as práticas recomendadas atuais desencorajam a inclusão de senhas de usuário diretamente em cadeias de conexão. Para dar suporte a essas alterações, o .NET Framework 4.7.2 estende cadeias de conexão SQLClient adicionando um novo valor, "Active Directory Interactive", para que a palavra-chave "Autenticação" existente dê suporte à Autenticação MFA e Azure AD. O novo método interativo dá suporte a usuários nativos e federados do Azure AD, bem como usuários convidados do Azure AD. Quando esse método é usado, a autenticação de MFA imposta pelo Azure AD tem suporte para bancos de dados SQL. Além disso, o processo de autenticação solicita uma senha de usuário para aderir às práticas recomendadas de segurança.
Nas versões anteriores do .NET Framework, a conectividade SQL tinha suporte apenas para as opções e SqlAuthenticationMethod.ActiveDirectoryIntegrated as SqlAuthenticationMethod.ActiveDirectoryPassword opções. Ambos fazem parte do protocolo ADAL não interativo, que não dá suporte à MFA. Com a nova SqlAuthenticationMethod.ActiveDirectoryInteractive opção, a conectividade SQL dá suporte à MFA, bem como aos métodos de autenticação existentes (senha e autenticação integrada), que permite que os usuários insiram senhas de usuário interativamente sem persistir senhas na cadeia de conexão.
Para obter mais informações e um exemplo, consulte "SQL -- Suporte à Autenticação Universal e Multifator do Azure AD" no blog do .NET.
Suporte para Always Encrypted versão 2
O NET Framework 4.7.2 adiciona suporte ao Always Encrypted baseado em enclave. A versão original do Always Encrypted é uma tecnologia de criptografia do lado do cliente na qual as chaves de criptografia nunca saem do cliente. No Always Encrypted baseado em enclave, o cliente pode, opcionalmente, enviar as chaves de criptografia para um enclave seguro, que é uma entidade computacional segura que pode ser considerada parte do SQL Server, mas que o código do SQL Server não pode adulterar. Para dar suporte ao Always Encrypted baseado em enclave, o .NET Framework 4.7.2 adiciona os seguintes tipos e membros ao System.Data.SqlClient namespace:
SqlConnectionStringBuilder.EnclaveAttestationUrl, que especifica o Uri para Always Encrypted baseado em enclave.
SqlColumnEncryptionEnclaveProvider, que é uma classe abstrata da qual todos os provedores de enclave são derivados.
SqlEnclaveSession, que encapsula o estado para uma determinada sessão de enclave.
SqlEnclaveAttestationParameters, que fornece os parâmetros de atestado usados pelo SQL Server para obter informações necessárias para executar um protocolo de atestado específico.
Em seguida, o arquivo de configuração do aplicativo especifica uma implementação concreta da classe abstrata System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider que fornece a funcionalidade para o provedor de enclave. Por exemplo:
<configuration>
<configSections>
<section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</configSections>
<SqlColumnEncryptionEnclaveProviders>
<providers>
<add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
<add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
</providers>
</SqlColumnEncryptionEnclaveProviders >
</configuration>
O fluxo básico do Always Encrypted baseado em enclave é:
O usuário cria uma conexão AlwaysEncrypted com o SQL Server que dá suporte ao Always Encrypted baseado em enclave. O driver entra em contato com o serviço de atestado para garantir que ele esteja se conectando ao enclave correto.
Depois que o enclave for atestado, o driver estabelecerá um canal seguro com o enclave seguro hospedado no SQL Server.
O driver compartilha chaves de criptografia autorizadas pelo cliente com o enclave seguro durante a conexão SQL.
Windows Presentation Foundation
Localizando ResourceDictionaries por origem
A partir do .NET Framework 4.7.2, um assistente de diagnóstico pode localizar o que foi criado a partir de um determinado Uri de origem ResourceDictionaries . (Esse recurso é para uso por assistentes de diagnóstico, não por aplicativos de produção.) Um assistente de diagnóstico, como o recurso "Editar e Continuar" do Visual Studio, permite que o usuário edite um ResourceDictionary com a intenção de que as alterações sejam aplicadas ao aplicativo em execução. Uma etapa para conseguir isso é encontrar todos os ResourceDictionaries que o aplicativo em execução criou a partir do dicionário que está sendo editado. Por exemplo, um aplicativo pode declarar um ResourceDictionary cujo conteúdo é copiado de um determinado URI de origem:
<ResourceDictionary Source="MyRD.xaml" />
Um assistente de diagnóstico que edita a marcação original no MyRD.xaml pode usar o novo recurso para localizar o dicionário. O recurso é implementado por um novo método estático. ResourceDictionaryDiagnostics.GetResourceDictionariesForSource O assistente de diagnóstico chama o novo método usando um Uri absoluto que identifica a marcação original, conforme ilustrado pelo seguinte código:
IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))
O método retorna um enumerável vazio, a menos que VisualDiagnostics esteja habilitado e a variável de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ambiente esteja definida.
Localizando proprietários do ResourceDictionary
A partir do .NET Framework 4.7.2, um assistente de diagnóstico pode localizar os proprietários de um determinado ResourceDictionary. (O recurso é usado por assistentes de diagnóstico e não por aplicativos de produção.) Sempre que uma alteração é feita em um ResourceDictionary, o WPF localiza automaticamente todas as referências DynamicResource que podem ser afetadas pela alteração.
Um assistente de diagnóstico, como o recurso "Editar e Continuar" do Visual Studio, pode querer estendê-lo para lidar com referências StaticResource . A primeira etapa nesse processo é localizar os proprietários do dicionário; ou seja, para localizar todos os objetos cuja Resources propriedade se refere ao dicionário (direta ou indiretamente por meio da ResourceDictionary.MergedDictionaries propriedade). Três novos métodos estáticos implementados na classe, um para cada um dos tipos base que tem uma Resources propriedade, dão suporte a System.Windows.Diagnostics.ResourceDictionaryDiagnostics esta etapa:
Esses métodos retornam uma enumerável vazia, a menos que VisualDiagnostics esteja habilitada e a variável de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ambiente esteja definida.
Localizando referências StaticResource
Um assistente de diagnóstico agora pode receber uma notificação sempre que uma referência StaticResource for resolvida. (O recurso é usado por assistentes de diagnóstico, não por aplicativos de produção.) Um assistente de diagnóstico, como o recurso "Editar e Continuar" do Visual Studio, pode querer atualizar todos os usos de um recurso quando seu valor em uma ResourceDictionary alteração. O WPF faz isso automaticamente para referências DynamicResource , mas intencionalmente não faz isso para referências StaticResource . A partir do .NET Framework 4.7.2, o assistente de diagnóstico pode usar essas notificações para localizar esses usos do recurso estático.
A notificação é implementada pelo novo ResourceDictionaryDiagnostics.StaticResourceResolved evento:
public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)
Esse evento é gerado sempre que o runtime resolve uma referência StaticResource . Os StaticResourceResolvedEventArgs argumentos descrevem a resolução e indicam o objeto e a propriedade que hospedam a referência StaticResource e a ResourceDictionary chave usada para a resolução:
public class StaticResourceResolvedEventArgs : EventArgs
{
public Object TargetObject { get; }
public Object TargetProperty { get; }
public ResourceDictionary ResourceDictionary { get; }
public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
Public ReadOnly Property TargetObject As Object
Public ReadOnly Property TargetProperty As Object
Public ReadOnly Property ResourceDictionary As ResourceDictionary
Public ReadOnly Property ResourceKey As Object
End Class
O evento não é gerado (e seu add acessador é ignorado), a menos que VisualDiagnostics esteja habilitado e a variável de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ambiente seja definida.
ClickOnce
Aplicativos com reconhecimento de HDPI para Windows Forms, Windows Presentation Foundation (WPF) e VSTO (Ferramentas do Visual Studio para Office) podem ser implantados usando o ClickOnce. Se a seguinte entrada for encontrada no manifesto do aplicativo, a implantação terá êxito no .NET Framework 4.7.2:
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
Para o aplicativo Windows Forms, a solução anterior da definição de reconhecimento de DPI no arquivo de configuração do aplicativo em vez do manifesto do aplicativo não é mais necessária para que a implantação do ClickOnce seja bem-sucedida.
Novidades no .NET Framework 4.7.1
O .NET Framework 4.7.1 inclui novos recursos nas seguintes áreas:
Além disso, um foco principal no .NET Framework 4.7.1 é a acessibilidade aprimorada, o que permite que um aplicativo forneça uma experiência apropriada para os usuários da Tecnologia Adaptativa. Para obter informações sobre melhorias de acessibilidade no .NET Framework 4.7.1, confira as novidades na acessibilidade no .NET Framework.
Classes base
Suporte para .NET Standard 2.0
O .NET Standard define um conjunto de APIs que devem estar disponíveis em cada implementação do .NET que dê suporte a essa versão do padrão. O .NET Framework 4.7.1 dá suporte total ao .NET Standard 2.0 e adiciona cerca de 200 APIs definidas no .NET Standard 2.0 e que estão ausentes do .NET Framework 4.6.1, 4.6.2 e 4.7. (Observe que essas versões do .NET Framework dão suporte ao .NET Standard 2.0 somente se arquivos de suporte adicionais do .NET Standard também forem implantados no sistema de destino.) Para obter mais informações, consulte "BCL – Suporte ao .NET Standard 2.0" na postagem do blog recursos de runtime e compilador do .NET Framework 4.7.1 .
Suporte para construtores de configuração
Os construtores de configuração permitem que os desenvolvedores insiram e criem configurações para aplicativos dinamicamente em tempo de execução. Os construtores de configuração personalizados podem ser usados para modificar dados existentes em uma seção de configuração ou para criar uma seção de configuração inteiramente do zero. Sem construtores de configuração, .config arquivos são estáticos e suas configurações são definidas algum tempo antes de um aplicativo ser iniciado.
Para criar um construtor de configurações personalizado, você deriva seu construtor da classe abstrata ConfigurationBuilder e substitui seu ConfigurationBuilder.ProcessConfigurationSection e ConfigurationBuilder.ProcessRawXml. Você também define seus construtores em seu arquivo de .config. Para obter mais informações, consulte a seção "Construtores de Configuração" na postagem do blog .NET Framework 4.7.1 ASP.NET e Recursos de Configuração .
Detecção de recursos em tempo de execução
A System.Runtime.CompilerServices.RuntimeFeature classe fornece um mecanismo para determinar se um recurso predefinido tem suporte em uma determinada implementação do .NET em tempo de compilação ou tempo de execução. No tempo de compilação, um compilador pode verificar se existe um campo especificado para determinar se o recurso tem suporte; em caso afirmativo, ele pode emitir código que aproveita esse recurso. Em tempo de execução, um aplicativo pode chamar o RuntimeFeature.IsSupported método antes de emitir código em tempo de execução. Para obter mais informações, consulte Adicionar método auxiliar para descrever os recursos compatíveis com o runtime.
Os tipos de tupla de valor são serializáveis
A partir do .NET Framework 4.7.1, System.ValueTuple e seus tipos genéricos associados são marcados como Serializáveis, o que permite a serialização binária. Isso deve facilitar a migração de tipos de Tupla, como Tuple<T1,T2,T3> e Tuple<T1,T2,T3,T4>, para tipos de tupla de valor. Para obter mais informações, consulte "Compilador -- ValueTuple é serializável" na postagem do blog .NET Framework 4.7.1 Runtime and Compiler Features .
Suporte para referências somente leitura
O .NET Framework 4.7.1 adiciona o System.Runtime.CompilerServices.IsReadOnlyAttribute. Esse atributo é usado por compiladores de linguagem para marcar membros que têm parâmetros ou tipos de retorno de ref somente leitura. Para obter mais informações, consulte "Compilador – Suporte para ReadOnlyReferences" na postagem do blog recursos de runtime e compilador do .NET Framework 4.7.1 . Para obter informações sobre valores de retorno ref, consulte Ref return values and ref locals and Ref return values (Visual Basic).
CLR (Common Language Runtime)
Melhorias no desempenho da coleta de lixo
As alterações na GC (coleta de lixo) no .NET Framework 4.7.1 melhoram o desempenho geral, especialmente para alocações loh (heap de objetos grandes). No .NET Framework 4.7.1, bloqueios separados são usados para alocações de SOH (heap de objetos pequenos) e LOH, o que permite que as alocações LOH ocorram quando o GC em segundo plano está varrendo o SOH. Como resultado, os aplicativos que fazem um grande número de alocações LOH devem ver uma redução na contenção de bloqueio de alocação e melhor desempenho. Para obter mais informações, consulte a seção "Runtime -- Melhorias de desempenho do GC" na postagem do blog de recursos de runtime e compilador do .NET Framework 4.7.1 .
Rede
Suporte sha-2 para Message.HashAlgorithm
No .NET Framework 4.7 e versões anteriores, a Message.HashAlgorithm propriedade tinha suporte apenas para HashAlgorithm.Md5HashAlgorithm.Sha valores. A partir do .NET Framework 4.7.1, HashAlgorithm.Sha256HashAlgorithm.Sha384e HashAlgorithm.Sha512 também há suporte. Se esse valor é realmente usado depende do MSMQ, já que a Message própria instância não faz hash, mas simplesmente passa valores para MSMQ. Para obter mais informações, consulte a seção "Suporte sha-2 para Message.HashAlgorithm" na postagem do blog de recursos do .NET Framework 4.7.1 ASP.NET e configuração .
ASP.NET
Etapas de execução em aplicativos ASP.NET
ASP.NET processa solicitações em um pipeline predefinido que inclui 23 eventos. ASP.NET executa cada manipulador de eventos como uma etapa de execução. Em versões de ASP.NET até o .NET Framework 4.7, ASP.NET não pode fluir o contexto de execução devido à alternância entre threads nativos e gerenciados. Em vez disso, ASP.NET flui seletivamente apenas o HttpContext. A partir do .NET Framework 4.7.1, o método também permite que os HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) módulos restaurem dados ambientes. Esse recurso é direcionado a bibliotecas relacionadas ao rastreamento, criação de perfil, diagnóstico ou transações, por exemplo, que se preocupam com o fluxo de execução do aplicativo. Para obter mais informações, consulte o "recurso da etapa de execução ASP.NET" na postagem do blog .NET Framework 4.7.1 ASP.NET e Recursos de Configuração .
ASP.NET análise httpcookie
O .NET Framework 4.7.1 inclui um novo método, HttpCookie.TryParseque fornece uma maneira padronizada de criar um HttpCookie objeto a partir de uma cadeia de caracteres e atribuir com precisão valores de cookie, como data de expiração e caminho. Para obter mais informações, consulte "ASP.NET análise httpcookie" na postagem do blog .NET Framework 4.7.1 ASP.NET e Recursos de Configuração .
Opções de hash SHA-2 para credenciais de autenticação de formulários de ASP.NET
No .NET Framework 4.7 e versões anteriores, ASP.NET permitiu que os desenvolvedores armazenassem credenciais de usuário com senhas hash em arquivos de configuração usando MD5 ou SHA1. A partir do .NET Framework 4.7.1, ASP.NET também dá suporte a novas opções de hash SHA-2 seguras, como SHA256, SHA384 e SHA512. SHA1 continua sendo o padrão e um algoritmo de hash não padrão pode ser definido no arquivo de configuração da Web.
Importante
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.
Novidades no .NET Framework 4.7
O .NET Framework 4.7 inclui novos recursos nas seguintes áreas:
- Classes base
- Relacionamento em Rede
- ASP.NET
- Windows Communication Foundation (WCF)
- Windows Forms
- WPF (Windows Presentation Foundation)
Para obter uma lista de novas APIs adicionadas ao .NET Framework 4.7, consulte as Alterações de API do .NET Framework 4.7 no GitHub. Para obter uma lista de melhorias de recursos e correções de bug no .NET Framework 4.7, consulte a Lista de Alterações do .NET Framework 4.7 no GitHub. Para obter mais informações, consulte Anunciando o .NET Framework 4.7 no blog do .NET.
Classes base
O .NET Framework 4.7 melhora a serialização pelo DataContractJsonSerializer:
Funcionalidade aprimorada com Criptografia de Curva Elíptica (ECC)*
No .NET Framework 4.7, ImportParameters(ECParameters) métodos foram adicionados ao ECDsa e ECDiffieHellman classes para permitir que um objeto representasse uma chave já estabelecida. Um ExportParameters(Boolean) método também foi adicionado para exportar a chave usando parâmetros de curva explícitos.
O .NET Framework 4.7 também adiciona suporte para curvas adicionais (incluindo o conjunto de curvas brainpool) e adicionou definições predefinidas para facilitar a criação por meio dos métodos novos Create e Create de fábrica.
Você pode ver um exemplo de melhorias de criptografia do .NET Framework 4.7 no GitHub.
Melhor suporte para caracteres de controle pelo DataContractJsonSerializer
No .NET Framework 4.7, a DataContractJsonSerializer classe serializa os caracteres de controle em conformidade com o padrão ECMAScript 6. Esse comportamento é habilitado por padrão para aplicativos direcionados ao .NET Framework 4.7 e é um recurso de aceitação para aplicativos que estão em execução no .NET Framework 4.7, mas têm como destino uma versão anterior do .NET Framework. Para obter mais informações, consulte a seção compatibilidade do aplicativo .
Rede
O .NET Framework 4.7 adiciona o seguinte recurso relacionado à rede:
Suporte padrão do sistema operacional para protocolos TLS*
A pilha TLS, que é usada por System.Net.Security.SslStream componentes de up-stack, como HTTP, FTP e SMTP, permite que os desenvolvedores usem os protocolos TLS padrão compatíveis com o sistema operacional. Os desenvolvedores não precisam mais de código rígido de uma versão do TLS.
ASP.NET
No .NET Framework 4.7, ASP.NET inclui os seguintes novos recursos:
Extensibilidade do Cache de Objetos
A partir do .NET Framework 4.7, ASP.NET adiciona um novo conjunto de APIs que permitem que os desenvolvedores substituam as implementações de ASP.NET padrão para o cache de objetos na memória e o monitoramento de memória. Os desenvolvedores agora podem substituir qualquer um dos três componentes a seguir se a implementação do ASP.NET não for adequada:
Repositório de Cache de Objetos. Usando a nova seção de configuração de provedores de cache, os desenvolvedores podem conectar novas implementações de um cache de objeto para um aplicativo ASP.NET usando a nova interface ICacheStoreProvider .
Monitoramento de memória. O monitor de memória padrão no ASP.NET notifica os aplicativos quando eles estão sendo executados perto do limite de bytes privados configurados para o processo ou quando o computador está com pouca memória RAM física disponível total. Quando esses limites estão próximos, as notificações são acionadas. Para alguns aplicativos, as notificações são acionadas muito perto dos limites configurados para permitir reações úteis. Os desenvolvedores agora podem escrever seus próprios monitores de memória para substituir o padrão usando a ApplicationMonitors.MemoryMonitor propriedade.
Reações de limite de memória. Por padrão, ASP.NET tenta cortar o cache de objetos e chamar GC.Collect periodicamente quando o limite do processo de bytes privado está próximo. Para alguns aplicativos, a frequência de chamadas ou GC.Collect a quantidade de cache que é cortada são ineficientes. Os desenvolvedores agora podem substituir ou complementar o comportamento padrão assinando implementações IObserver no monitor de memória do aplicativo.
Windows Communication Foundation (WCF)
O Windows Communication Foundation (WCF) adiciona os seguintes recursos e alterações:
Capacidade de definir as configurações de segurança de mensagem padrão para TLS 1.1 ou TLS 1.2
A partir do .NET Framework 4.7, o WCF permite configurar o TLS 1.1 ou o TLS 1.2, além do SSL 3.0 e do TLS 1.0 como o protocolo de segurança de mensagem padrão. Essa é uma configuração de aceitação; para habilitá-lo, você deve adicionar a seguinte entrada ao arquivo de configuração do aplicativo:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Confiabilidade aprimorada de aplicativos WCF e serialização do WCF
O WCF inclui várias alterações de código que eliminam as condições de corrida, melhorando assim o desempenho e a confiabilidade das opções de serialização. Elas incluem:
- Melhor suporte para misturar código assíncrono e síncrono em chamadas para SocketConnection.BeginRead e SocketConnection.Read.
- Confiabilidade aprimorada ao anular uma conexão com SharedConnectionListener e DuplexChannelBinder.
- Confiabilidade aprimorada das operações de serialização ao chamar o FormatterServices.GetSerializableMembers(Type) método.
- Confiabilidade aprimorada ao remover um garçom chamando o método ChannelSynchronizer.RemoveWaiter .
Windows Forms
No .NET Framework 4.7, o Windows Forms melhora o suporte para monitores DPI altos.
Suporte a DPI alta
Começando com aplicativos destinados ao .NET Framework 4.7, o .NET Framework apresenta alto DPI e suporte a DPI dinâmico para aplicativos do Windows Forms. O alto suporte a DPI melhora o layout e a aparência de formulários e controles em monitores DPI altos. O DPI dinâmico altera o layout e a aparência de formulários e controles quando o usuário altera o DPI ou exibe o fator de escala de um aplicativo em execução.
O alto suporte a DPI é um recurso de aceitação que você configura definindo uma <seção System.Windows.Forms.ConfigurationSection> no arquivo de configuração do aplicativo. Para obter mais informações sobre como adicionar suporte a DPI alta e suporte dinâmico de DPI ao seu aplicativo windows forms, consulte Suporte a DPI alto no Windows Forms.
Windows Presentation Foundation (WPF)
No .NET Framework 4.7, o WPF inclui os seguintes aprimoramentos:
Suporte para uma pilha de toque/caneta com base em mensagens do Windows WM_POINTER
Agora você tem a opção de usar uma pilha touch/stylus com base em mensagens WM_POINTER em vez da WISP (Windows Ink Services Platform). Esse é um recurso de aceitação no .NET Framework. Para obter mais informações, consulte a seção compatibilidade do aplicativo .
Nova implementação para APIs de impressão do WPF
As APIs de impressão do WPF na System.Printing.PrintQueue classe chamam a API do Pacote de Documentos de Impressão do Windows em vez da API de Impressão XPS preterida. Para obter o impacto dessa alteração na compatibilidade do aplicativo, consulte a seção de compatibilidade do aplicativo .
Novidades no .NET Framework 4.6.2
O .NET Framework 4.6.2 inclui novos recursos nas seguintes áreas:
Para obter uma lista de novas APIs adicionadas ao .NET Framework 4.6.2, consulte as alterações de API do .NET Framework 4.6.2 no GitHub. Para obter uma lista de melhorias de recursos e correções de bug no .NET Framework 4.6.2, consulte a Lista de Alterações do .NET Framework 4.6.2 no GitHub. Para obter mais informações, consulte Anunciando o .NET Framework 4.6.2 no blog do .NET.
ASP.NET
No .NET Framework 4.6.2, ASP.NET inclui os seguintes aprimoramentos:
Suporte aprimorado para mensagens de erro localizadas em validadores de anotação de dados
Os validadores de anotação de dados permitem que você execute a validação adicionando um ou mais atributos a uma propriedade de classe. O elemento do ValidationAttribute.ErrorMessage atributo define o texto da mensagem de erro se a validação falhar. A partir do .NET Framework 4.6.2, ASP.NET facilita a localização de mensagens de erro. As mensagens de erro serão localizadas se:
O ValidationAttribute.ErrorMessage é fornecido no atributo de validação.
O arquivo de recurso é armazenado na pasta App_LocalResources.
O nome do arquivo de recursos localizados tem o nome
}.resxdo formulárioDataAnnotation.Localization.{, em que o nome é um nome de cultura no formato languageCode-country/regionCode ou languageCode.O nome da chave do recurso é a cadeia de caracteres atribuída ao ValidationAttribute.ErrorMessage atributo e seu valor é a mensagem de erro localizada.
Por exemplo, o atributo de anotação de dados a seguir define a mensagem de erro da cultura padrão para uma classificação inválida.
public class RatingInfo
{
[Required(ErrorMessage = "The rating must be between 1 and 10.")]
[Display(Name = "Your Rating")]
public int Rating { get; set; }
}
Public Class RatingInfo
<Required(ErrorMessage = "The rating must be between 1 and 10.")>
<Display(Name = "Your Rating")>
Public Property Rating As Integer = 1
End Class
Em seguida, você pode criar um arquivo de recurso, DataAnnotation.Localization.fr.resx, cuja chave é a cadeia de caracteres de mensagem de erro e cujo valor é a mensagem de erro localizada. O arquivo deve ser encontrado na App.LocalResources pasta. Por exemplo, o seguinte é a chave e seu valor em uma mensagem de erro de idioma francês localizado (fr):
| Nome | Value |
|---|---|
| A classificação deve estar entre 1 e 10. | La note doit être comprise entre 1 et 10. |
Além disso, a localização da anotação de dados é extensível. Os desenvolvedores podem conectar seu próprio provedor de localizador de cadeia de caracteres implementando a IStringLocalizerProvider interface para armazenar a cadeia de caracteres de localização em algum lugar diferente de um arquivo de recurso.
Suporte assíncrono com provedores de repositório de estado de sessão
ASP.NET agora permite que métodos de retorno de tarefa sejam usados com provedores de repositório de estado de sessão, permitindo que ASP.NET aplicativos obtenham os benefícios de escalabilidade da assíncrona. Para dar suporte a operações assíncronas com provedores de repositório de estado de sessão, ASP.NET inclui uma nova interface, System.Web.SessionState.ISessionStateModuleque herda IHttpModule e permite que os desenvolvedores implementem seu próprio módulo de estado de sessão e provedores de repositório de sessão assíncrona. A interface é definida da seguinte maneira:
public interface ISessionStateModule : IHttpModule {
void ReleaseSessionState(HttpContext context);
Task ReleaseSessionStateAsync(HttpContext context);
}
Public Interface ISessionStateModule : Inherits IHttpModule
Sub ReleaseSessionState(context As HttpContext)
Function ReleaseSessionStateAsync(context As HttpContext) As Task
End Interface
Além disso, a SessionStateUtility classe inclui dois novos métodos IsSessionStateReadOnly e IsSessionStateRequired, que podem ser usados para dar suporte a operações assíncronas.
Suporte assíncrono para provedores de cache de saída
A partir do .NET Framework 4.6.2, os métodos de retorno de tarefa podem ser usados com provedores de cache de saída para fornecer os benefícios de escalabilidade da assíncrona. Os provedores que implementam esses métodos reduzem o bloqueio de threads em um servidor Web e melhoram a escalabilidade de um serviço ASP.NET.
As seguintes APIs foram adicionadas para dar suporte a provedores de cache de saída assíncronos:
A System.Web.Caching.OutputCacheProviderAsync classe, que herda System.Web.Caching.OutputCacheProvider e permite que os desenvolvedores implementem um provedor de cache de saída assíncrono.
A OutputCacheUtility classe, que fornece métodos auxiliares para configurar o cache de saída.
18 novos métodos na System.Web.HttpCachePolicy classe. Estes incluem , , , , GetETagFromFileDependencies, GetMaxAge, GetMaxAge, GetNoStore, GetNoTransforms, , GetOmitVaryStar, GetProxyMaxAge, GetRevalidation, , GetUtcLastModified, GetVaryByCustom, , HasSlidingExpiration, e IsValidUntilExpires. GetETagGetCacheExtensionsGetCacheability
2 novos métodos na System.Web.HttpCacheVaryByContentEncodings classe: GetContentEncodings e SetContentEncodings.
2 novos métodos na System.Web.HttpCacheVaryByHeaders classe: GetHeaders e SetHeaders.
2 novos métodos na System.Web.HttpCacheVaryByParams classe: GetParams e SetParams.
System.Web.Caching.AggregateCacheDependency Na classe, o GetFileDependencies método.
CacheDependencyNo método .GetFileDependencies
Categorias de caracteres
Os caracteres no .NET Framework 4.6.2 são classificados com base no Padrão Unicode, versão 8.0.0. No .NET Framework 4.6 e no .NET Framework 4.6.1, os caracteres foram classificados com base nas categorias de caracteres Unicode 6.3.
O suporte para Unicode 8.0 é limitado à classificação de caracteres pela CharUnicodeInfo classe e aos tipos e métodos que dependem dela. Isso inclui a StringInfo classe, o método sobrecarregado Char.GetUnicodeCategory e as classes de caractere reconhecidas pelo mecanismo de expressão regular do .NET Framework. A comparação e a classificação de caracteres e cadeias de caracteres não são afetadas por essa alteração e continuam a depender do sistema operacional subjacente ou, em sistemas Windows 7, em dados de caractere fornecidos pelo .NET Framework.
Para obter alterações nas categorias de caracteres do Unicode 6.0 para o Unicode 7.0, consulte o Unicode Standard, versão 7.0.0 no site do Consórcio Unicode. Para obter alterações do Unicode 7.0 para Unicode 8.0, consulte o Unicode Standard, versão 8.0.0 no site do Consórcio Unicode.
Criptografia
Suporte para certificados X509 que contêm FIPS 186-3 DSA
O .NET Framework 4.6.2 adiciona suporte para certificados DSA (Algoritmo de Assinatura Digital) X509 cujas chaves excedem o limite de 186-2 1024 bits fips.
Além de dar suporte aos tamanhos de chave maiores do FIPS 186-3, o .NET Framework 4.6.2 permite assinaturas de computação com a família SHA-2 de algoritmos de hash (SHA256, SHA384 e SHA512). O suporte ao FIPS 186-3 é fornecido pela nova System.Security.Cryptography.DSACng classe.
De acordo com as alterações RSA recentes na classe no .NET Framework 4.6 e ECDsa na classe no .NET Framework 4.6.1, a DSA classe base abstrata no .NET Framework 4.6.2 tem métodos adicionais para permitir que os chamadores usem essa funcionalidade sem a conversão. Você pode chamar o DSACertificateExtensions.GetDSAPrivateKey método de extensão para assinar dados, como mostra o exemplo a seguir.
public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPrivateKey())
{
return dsa.SignData(data, HashAlgorithmName.SHA384);
}
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
Using DSA As DSA = cert.GetDSAPrivateKey()
Return DSA.SignData(data, HashAlgorithmName.SHA384)
End Using
End Function
E você pode chamar o DSACertificateExtensions.GetDSAPublicKey método de extensão para verificar os dados assinados, como mostra o exemplo a seguir.
public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPublicKey())
{
return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
}
}
Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
Using dsa As DSA = cert.GetDSAPublicKey()
Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
End Using
End Function
Maior clareza para entradas em rotinas de derivação de chave ECDiffieHellman
O .NET Framework 3.5 adicionou suporte para curva elíptica Diffie-Hellman contrato de chave com três rotinas de KDF (Função de Derivação de Chave) diferentes. As entradas para as rotinas e as próprias rotinas foram configuradas por meio de propriedades no ECDiffieHellmanCng objeto. Mas como nem todas as rotinas leem cada propriedade de entrada, havia amplo espaço para confusão sobre o passado do desenvolvedor.
Para resolver isso no .NET Framework 4.6.2, os três métodos a ECDiffieHellman seguir foram adicionados à classe base para representar mais claramente essas rotinas de KDF e suas entradas:
| Método ECDiffieHellman | Description |
|---|---|
| DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) | Deriva material de chave usando a fórmula HASH(secretPrepend || x || secretAppend) HASH(secretPrepend OrElse x OrElse secretAppend) onde x é o resultado computado do algoritmo de Diffie-Hellman de EC. |
| DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) | Deriva material de chave usando a fórmula HMAC(hmacKey, secretPrepend || x || secretAppend) HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend) onde x é o resultado computado do algoritmo de Diffie-Hellman de EC. |
| DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) | Deriva material de chave usando o algoritmo de derivação prf (função pseudo-aleatória) do TLS. |
Suporte para criptografia simétrica de chave persistente
A biblioteca de criptografia do Windows (CNG) adicionou suporte para armazenar chaves simétricas persistentes e usar chaves simétricas armazenadas em hardware e o .NET Framework 4.6.2 possibilitou que os desenvolvedores usssem esse recurso. Como a noção de nomes de chave e provedores de chave é específica à implementação, o uso desse recurso requer a utilização do construtor dos tipos de implementação concretos em vez da abordagem de fábrica preferencial (como chamar Aes.Create).
Há suporte de criptografia simétrica de chave persistente para os algoritmos AES (AesCng) e 3DES (TripleDESCng). Por exemplo:
public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv)
{
using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider))
{
aes.IV = iv;
// Using the zero-argument overload is required to make use of the persisted key
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
if (!encryptor.CanTransformMultipleBlocks)
{
throw new InvalidOperationException("This is a sample, this case wasn't handled...");
}
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
}
}
Public Shared Function EncryptDataWithPersistedKey(data As Byte(), iv As Byte()) As Byte()
Using Aes As Aes = New AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)
Aes.IV = iv
' Using the zero-argument overload Is required to make use of the persisted key
Using encryptor As ICryptoTransform = Aes.CreateEncryptor()
If Not encryptor.CanTransformMultipleBlocks Then
Throw New InvalidOperationException("This is a sample, this case wasn't handled...")
End If
Return encryptor.TransformFinalBlock(data, 0, data.Length)
End Using
End Using
End Function
Suporte a SignedXml para hash SHA-2
O .NET Framework 4.6.2 adiciona suporte à SignedXml classe para os métodos de assinatura RSA-SHA256, RSA-SHA384 e RSA-SHA512 PKCS#1 e algoritmos de resumo de referência SHA256, SHA384 e SHA512.
As constantes de URI são todas expostas em SignedXml:
| Campo SignedXml | Constante |
|---|---|
| XmlDsigSHA256Url | "http://www.w3.org/2001/04/xmlenc#sha256" |
| XmlDsigRSASHA256Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" |
| XmlDsigSHA384Url | "http://www.w3.org/2001/04/xmldsig-more#sha384" |
| XmlDsigRSASHA384Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384" |
| XmlDsigSHA512Url | "http://www.w3.org/2001/04/xmlenc#sha512" |
| XmlDsigRSASHA512Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" |
Todos os programas que registraram um manipulador CryptoConfig personalizado SignatureDescription para adicionar suporte a esses algoritmos continuarão funcionando como no passado, mas como agora há padrões de plataforma, o CryptoConfig registro não é mais necessário.
SqlClient
O Provedor de Dados do .NET Framework para SQL Server (System.Data.SqlClient) inclui os seguintes novos recursos no .NET Framework 4.6.2:
Pool de conexões e tempos limite com bancos de dados SQL do Azure
Quando o pool de conexões está habilitado e ocorre um tempo limite ou outro erro de logon, uma exceção é armazenada em cache e a exceção armazenada em cache é gerada em qualquer tentativa de conexão subsequente nos próximos 5 segundos a 1 minuto. Para obter mais informações, consulte Pooling de Conexões do SQL Server (ADO.NET).
Esse comportamento não é desejável ao se conectar aos Bancos de Dados SQL do Azure, pois as tentativas de conexão podem falhar com erros transitórios que normalmente são recuperados rapidamente. Para otimizar melhor a experiência de repetição de conexão, o comportamento do período de bloqueio do pool de conexões é removido quando as conexões com os Bancos de Dados SQL do Azure falham.
A adição da nova PoolBlockingPeriod palavra-chave permite que você selecione o período de bloqueio mais adequado para seu aplicativo. Os valores incluem:
O período de bloqueio do pool de conexões para um aplicativo que se conecta a um Banco de Dados SQL do Azure está desabilitado e o período de bloqueio do pool de conexões para um aplicativo que se conecta a qualquer outra instância do SQL Server está habilitado. Esse é o valor padrão. Se o nome do ponto de extremidade do servidor terminar com qualquer um dos seguintes, eles serão considerados Bancos de Dados SQL do Azure:
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
O período de bloqueio do pool de conexões está sempre habilitado.
O período de bloqueio do pool de conexões está sempre desabilitado.
Aprimoramentos do Always Encrypted
O SQLClient apresenta dois aprimoramentos para o Always Encrypted:
Para melhorar o desempenho de consultas parametrizadas em colunas de banco de dados criptografadas, os metadados de criptografia para parâmetros de consulta agora são armazenados em cache. Com a SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled propriedade definida como
true(que é o valor padrão), se a mesma consulta for chamada várias vezes, o cliente recuperará metadados de parâmetro do servidor apenas uma vez.As entradas de chave de criptografia de coluna no cache de chaves agora são removidas após um intervalo de tempo configurável, definido usando a SqlConnection.ColumnEncryptionKeyCacheTtl propriedade.
Windows Communication Foundation
No .NET Framework 4.6.2, o Windows Communication Foundation foi aprimorado nas seguintes áreas:
Suporte de segurança de transporte do WCF para certificados armazenados usando CNG
A segurança de transporte do WCF dá suporte a certificados armazenados usando a CNG (biblioteca de criptografia do Windows). No .NET Framework 4.6.2, esse suporte é limitado ao uso de certificados com uma chave pública que tem um expoente com no máximo 32 bits de comprimento. Quando um aplicativo tem como destino o .NET Framework 4.6.2, esse recurso está ativado por padrão.
Para aplicativos direcionados ao .NET Framework 4.6.1 e anteriores, mas que estão em execução no .NET Framework 4.6.2, esse recurso pode ser habilitado adicionando a linha a seguir à <seção de runtime> do arquivo app.config ou web.config.
<AppContextSwitchOverrides
value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>
Isso também pode ser feito programaticamente com código como o seguinte:
private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificates";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.IdentityModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)
Melhor suporte para várias regras de ajuste de horário de verão pela classe DataContractJsonSerializer
Os clientes podem usar uma configuração de aplicativo para determinar se a classe dá suporte a DataContractJsonSerializer várias regras de ajuste para um único fuso horário. Esse é um recurso de aceitação. Para habilitá-lo, adicione a seguinte configuração ao arquivo app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>
Quando esse recurso está habilitado, um DataContractJsonSerializer objeto usa o TimeZoneInfo tipo em vez do TimeZone tipo para desserializar dados de data e hora. TimeZoneInfo dá suporte a várias regras de ajuste, o que possibilita trabalhar com dados históricos de fuso horário; TimeZone não.
Para obter mais informações sobre a estrutura e os TimeZoneInfo ajustes de fuso horário, consulte Visão geral do fuso horário.
Melhor correspondência de NetNamedPipeBinding
O WCF tem uma nova configuração de aplicativo que pode ser definida em aplicativos cliente para garantir que eles sempre se conectem ao serviço escutando no URI que melhor corresponde ao que eles solicitam. Com essa configuração de aplicativo definida false como (o padrão), é possível que os clientes usem NetNamedPipeBinding para tentar se conectar a um serviço escutando em um URI que é uma subcadeia de caracteres do URI solicitado.
Por exemplo, um cliente tenta se conectar a um serviço escutando net.pipe://localhost/Service1, mas um serviço diferente nesse computador em execução com privilégio de administrador está escutando net.pipe://localhost. Com essa configuração de aplicativo definida como false, o cliente tentará se conectar ao serviço errado. Depois de definir a configuração truedo aplicativo, o cliente sempre se conectará ao melhor serviço de correspondência.
Observação
Clientes que usam NetNamedPipeBinding serviços de localização com base no endereço base do serviço (se ele existir) em vez do endereço completo do ponto de extremidade. Para garantir que essa configuração sempre funcione, o serviço deve usar um endereço base exclusivo.
Para habilitar essa alteração, adicione a seguinte configuração de aplicativo ao arquivo App.config ou Web.config do aplicativo cliente:
<configuration>
<appSettings>
<add key="wcf:useBestMatchNamedPipeUri" value="true" />
</appSettings>
</configuration>
O SSL 3.0 não é um protocolo padrão
Ao usar o NetTcp com segurança de transporte e um tipo de credencial de certificado, o SSL 3.0 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 está incluído na lista de protocolos do NetTcp. Todos os clientes existentes devem ser capazes de negociar uma conexão usando pelo menos o TLS 1.0. Se o Ssl3 for necessário, use um dos mecanismos de configuração a seguir para adicioná-lo à lista de protocolos negociados.
A SslStreamSecurityBindingElement.SslProtocols propriedade
A TcpTransportSecurity.SslProtocols propriedade
Windows Presentation Foundation (WPF)
No .NET Framework 4.6.2, o Windows Presentation Foundation foi aprimorado nas seguintes áreas:
Classificação de grupo
Um aplicativo que usa um CollectionView objeto para agrupar dados agora pode declarar explicitamente como classificar os grupos. A classificação explícita resolve o problema da ordenação não intuitiva que ocorre quando um aplicativo adiciona ou remove grupos dinamicamente ou quando altera o valor das propriedades do item envolvidas no agrupamento. Ele também pode melhorar o desempenho do processo de criação de grupo movendo comparações das propriedades de agrupamento do tipo da coleção completa para o tipo dos grupos.
Para dar suporte à classificação de grupo, o novo GroupDescription.SortDescriptions e GroupDescription.CustomSort as propriedades descrevem como classificar a coleção de grupos produzidos pelo GroupDescription objeto. Isso é análogo à maneira como as propriedades nomeadas ListCollectionView de forma idêntica descrevem como classificar os itens de dados.
Duas novas propriedades estáticas da PropertyGroupDescription classe CompareNameAscending e CompareNameDescendingpodem ser usadas para os casos mais comuns.
Por exemplo, os seguintes XAML agrupam dados por idade, classificam as faixas etárias em ordem crescente e agrupam os itens em cada faixa etária por sobrenome.
<GroupDescriptions>
<PropertyGroupDescription
PropertyName="Age"
CustomSort=
"{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
</PropertyGroupDescription>
</GroupDescriptions>
<SortDescriptions>
<SortDescription PropertyName="LastName"/>
</SortDescriptions>
Suporte a teclado virtual
O suporte a teclado virtual permite o acompanhamento de foco em aplicativos WPF invocando e descartando automaticamente o teclado virtual no Windows 10 quando a entrada por toque é recebida por um controle que pode levar entrada textual.
Nas versões anteriores do .NET Framework, os aplicativos WPF não podem aceitar o acompanhamento de foco sem desabilitar o suporte a gestos de caneta/toque do WPF. Como resultado, os aplicativos WPF devem escolher entre o suporte completo ao toque do WPF ou depender da promoção do mouse do Windows.
DPI por monitor
Para dar suporte à proliferação recente de ambientes de DPI híbrido e alto DPI para aplicativos WPF, o WPF no .NET Framework 4.6.2 permite a conscientização por monitor. Consulte os exemplos e o guia do desenvolvedor no GitHub para obter mais informações sobre como permitir que seu aplicativo WPF se torne consciente do DPI por monitor.
Nas versões anteriores do .NET Framework, os aplicativos WPF têm reconhecimento de DPI do sistema. Em outras palavras, a interface do usuário do aplicativo é dimensionada pelo sistema operacional conforme apropriado, dependendo da DPI do monitor no qual o aplicativo é renderizado.
Para aplicativos em execução no .NET Framework 4.6.2, você pode desabilitar as alterações de DPI por monitor em aplicativos WPF adicionando uma instrução de configuração à <seção de runtime> do arquivo de configuração do aplicativo, da seguinte maneira:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>
Windows Workflow Foundation (WF)
No .NET Framework 4.6.2, o Windows Workflow Foundation foi aprimorado na seguinte área:
Suporte para expressões C# e IntelliSense no Designer do WF Rehosted
A partir do .NET Framework 4.5, o WF dá suporte a expressões C# no Designer do Visual Studio e em fluxos de trabalho de código. O Designer de Fluxo de Trabalho Rehosted é um recurso fundamental do WF que permite que o Designer de Fluxo de Trabalho esteja em um aplicativo fora do Visual Studio (por exemplo, no WPF). O Windows Workflow Foundation fornece a capacidade de dar suporte a expressões C# e IntelliSense no Designer de Fluxo de Trabalho Rehosted. Para obter mais informações, consulte o blog do Windows Workflow Foundation.
Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio Nas versões do .NET Framework anteriores à 4.6.2, o WF Designer IntelliSense é interrompido quando um cliente recria um projeto de fluxo de trabalho do Visual Studio. Embora o build do projeto seja bem-sucedido, os tipos de fluxo de trabalho não são encontrados no designer e os avisos do IntelliSense para os tipos de fluxo de trabalho ausentes aparecem na janela Lista de Erros . O .NET Framework 4.6.2 resolve esse problema e disponibiliza o IntelliSense.
Os aplicativos V1 de fluxo de trabalho com o Rastreamento de Fluxo de Trabalho agora são executados no modo FIPS
Os computadores com o Modo de Conformidade FIPS habilitado agora podem executar com êxito um aplicativo de estilo de fluxo de trabalho versão 1 com o acompanhamento de fluxo de trabalho ativado. Para habilitar esse cenário, você deve fazer a seguinte alteração no arquivo app.config:
<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />
Se esse cenário não estiver habilitado, a execução do aplicativo continuará gerando uma exceção com a mensagem: "Essa implementação não faz parte dos algoritmos criptográficos validados pelo FIPS da Plataforma Windows".
Melhorias no fluxo de trabalho ao usar a Atualização Dinâmica com o Designer de Fluxo de Trabalho do Visual Studio
O Designer de Fluxo de Trabalho, o Designer de Atividade FlowChart e outros Designers de Atividade de Fluxo de Trabalho agora carregam e exibem com êxito fluxos de trabalho que foram salvos depois de chamar o DynamicUpdateServices.PrepareForUpdate método. Em versões do .NET Framework antes do .NET Framework 4.6.2, carregar um arquivo XAML no Visual Studio para um fluxo de trabalho que foi salvo após a chamada DynamicUpdateServices.PrepareForUpdate pode resultar nos seguintes problemas:
O Designer de Fluxo de Trabalho não pode carregar o arquivo XAML corretamente (quando o ViewStateData.Id está no final da linha).
O Designer de Atividade de Fluxograma ou outros Designers de Atividade de Fluxo de Trabalho podem exibir todos os objetos em seus locais padrão em vez de valores de propriedade anexados.
ClickOnce
O ClickOnce foi atualizado para dar suporte ao TLS 1.1 e ao TLS 1.2, além do protocolo 1.0, que ele já dá suporte. O ClickOnce detecta automaticamente qual protocolo é necessário; nenhuma etapa adicional no aplicativo ClickOnce é necessária para habilitar o suporte ao TLS 1.1 e 1.2.
Convertendo aplicativos do Windows Forms e do WPF em aplicativos UWP
O Windows agora oferece recursos para trazer aplicativos existentes da área de trabalho do Windows, incluindo aplicativos WPF e Windows Forms, para a Plataforma Universal do Windows (UWP). Essa tecnologia atua como uma ponte, permitindo que você migre gradualmente sua base de código existente para UWP, trazendo assim seu aplicativo para todos os dispositivos Windows 10.
Os aplicativos de área de trabalho convertidos ganham uma identidade de aplicativo semelhante à identidade do aplicativo de aplicativos UWP, o que torna as APIs UWP acessíveis para habilitar recursos como Blocos Dinâmicos e notificações. O aplicativo continua a se comportar como antes e é executado como um aplicativo de confiança total. Depois que o aplicativo é convertido, um processo de contêiner de aplicativo pode ser adicionado ao processo de confiança total existente para adicionar uma interface do usuário adaptável. Quando todas as funcionalidades são movidas para o processo de contêiner do aplicativo, o processo de confiança total pode ser removido e o novo aplicativo UWP pode ser disponibilizado para todos os dispositivos Windows 10.
Melhorias de depuração
A API de depuração não gerenciada foi aprimorada no .NET Framework 4.6.2 para executar análises adicionais quando uma NullReferenceException é gerada para que seja possível determinar qual variável em uma única linha de código-fonte é null. Para dar suporte a esse cenário, as SEGUINTEs APIs foram adicionadas à API de depuração não gerenciada.
As interfaces ICorDebugCode4, ICorDebugVariableHome e ICorDebugVariableHomeEnum , que expõem as casas nativas de variáveis gerenciadas. Isso permite que os depuradores façam algumas análises de fluxo de código quando ocorrerem NullReferenceException e trabalhem com versões anteriores para determinar a variável gerenciada que corresponde ao local nativo que foi
null.O método ICorDebugType2::GetTypeID fornece um mapeamento para ICorDebugType COR_TYPEID, o que permite que o depurador obtenha um COR_TYPEID sem uma instância do ICorDebugType. As APIs existentes em COR_TYPEID podem ser usadas para determinar o layout de classe do tipo.
Novidades no .NET Framework 4.6.1
O .NET Framework 4.6.1 inclui novos recursos nas seguintes áreas:
Para obter mais informações sobre o .NET Framework 4.6.1, consulte os seguintes tópicos:
Diferencial da API do .NET Framework (no GitHub)
Criptografia: suporte para certificados X509 que contêm ECDSA
O .NET Framework 4.6 adicionou suporte ao RSACng para certificados X509. O .NET Framework 4.6.1 adiciona suporte para certificados X509 ECDSA (algoritmo de assinatura digital de curva elíptica).
A ECDSA oferece melhor desempenho e é um algoritmo de criptografia mais seguro do que a RSA, fornecendo uma excelente opção em que o desempenho e a escalabilidade do TLS (Transport Layer Security) são uma preocupação. A implementação do .NET Framework encapsula chamadas na funcionalidade existente do Windows.
O código de exemplo a seguir mostra como é fácil gerar uma assinatura para um fluxo de bytes usando o novo suporte para certificados ECDSA X509 incluídos no .NET Framework 4.6.1.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Net461Code
{
public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
{
using (ECDsa privateKey = cert.GetECDsaPrivateKey())
{
return privateKey.SignData(data, HashAlgorithmName.SHA512);
}
}
public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
{
return privateKey.SignData(data, HashAlgorithmName.SHA512);
}
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Public Class Net461Code
Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
Using privateKey As ECDsa = cert.GetECDsaPrivateKey()
Return privateKey.SignData(data, HashAlgorithmName.SHA512)
End Using
End Function
Public Shared Function SignECDsaSha512(data As Byte, privateKey As ECDsa) As Byte()
Return privateKey.SignData(data, HashAlgorithmName.SHA512)
End Function
End Class
Isso oferece um contraste acentuado com o código necessário para gerar uma assinatura no .NET Framework 4.6.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Net46Code
{
public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
{
// This would require using cert.Handle and a series of p/invokes to get at the
// underlying key, then passing that to a CngKey object, and passing that to
// new ECDsa(CngKey). It's a lot of work.
throw new Exception("That's a lot of work...");
}
public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
{
// This way works, but SignData probably better matches what you want.
using (SHA512 hasher = SHA512.Create())
{
byte[] signature1 = privateKey.SignHash(hasher.ComputeHash(data));
}
// This might not be the ECDsa you got!
ECDsaCng ecDsaCng = (ECDsaCng)privateKey;
ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512;
return ecDsaCng.SignData(data);
}
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Public Class Net46Code
Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
' This would require using cert.Handle and a series of p/invokes to get at the
' underlying key, then passing that to a CngKey object, and passing that to
' new ECDsa(CngKey). It's a lot of work.
Throw New Exception("That's a lot of work...")
End Function
Public Shared Function SignECDsaSha512(data As Byte(), privateKey As ECDsa) As Byte()
' This way works, but SignData probably better matches what you want.
Using hasher As SHA512 = SHA512.Create()
Dim signature1 As Byte() = privateKey.SignHash(hasher.ComputeHash(data))
End Using
' This might not be the ECDsa you got!
Dim ecDsaCng As ECDsaCng = CType(privateKey, ECDsaCng)
ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512
Return ecDsaCng.SignData(data)
End Function
End Class
ADO.NET
O seguinte foi adicionado ao ADO.NET:
Suporte do Always Encrypted para chaves protegidas por hardware
ADO.NET agora dá suporte ao armazenamento de chaves mestras de coluna Always Encrypted nativamente em HSMs (Módulos de Segurança de Hardware). Com esse suporte, os clientes podem aproveitar as chaves assimétricas armazenadas em HSMs sem precisar escrever provedores personalizados de repositório de chaves mestras de coluna e registrá-las em aplicativos.
Os clientes precisam instalar o provedor CSP fornecido pelo fornecedor do HSM ou provedores de repositório de chaves CNG nos servidores de aplicativos ou computadores cliente para acessar dados Always Encrypted protegidos com chaves mestras de coluna armazenadas em um HSM.
Comportamento de conexão aprimorado MultiSubnetFailover para AlwaysOn
O SqlClient agora fornece conexões mais rápidas automaticamente para um AG (Grupo de Disponibilidade AlwaysOn). Ele detecta de forma transparente se seu aplicativo está se conectando a um AG (grupo de disponibilidade AlwaysOn) em uma sub-rede diferente e descobre rapidamente o servidor ativo atual e fornece uma conexão com o servidor. Antes desta versão, um aplicativo tinha que definir a cadeia de conexão a ser incluída "MultisubnetFailover=true" para indicar que ele estava se conectando a um Grupo de Disponibilidade AlwaysOn. Sem definir a palavra-chave truede conexão, um aplicativo pode experimentar um tempo limite ao se conectar a um Grupo de Disponibilidade AlwaysOn. Com essa versão, um aplicativo não precisa mais ser definido MultiSubnetFailovertrue . Para obter mais informações sobre o suporte do SqlClient para Grupos de Disponibilidade AlwaysOn, consulte o Suporte do SqlClient para alta disponibilidade, recuperação de desastre.
Windows Presentation Foundation (WPF)
O Windows Presentation Foundation inclui várias melhorias e alterações.
Desempenho aprimorado
O atraso no acionamento de eventos de toque foi corrigido no .NET Framework 4.6.1. Além disso, digitar em um RichTextBox controle não vincula mais o thread de renderização durante a entrada rápida.
Melhorias de verificação ortográfica
O verificador ortográfico no WPF foi atualizado no Windows 8.1 e versões posteriores para aproveitar o suporte do sistema operacional para verificação ortográfica de idiomas adicionais. Não há nenhuma alteração na funcionalidade em versões do Windows antes do Windows 8.1.
Como nas versões anteriores do .NET Framework, o idioma para um TextBox controle ou um RichTextBox bloco é detectado procurando informações na seguinte ordem:
xml:lang, se estiver presente.Idioma de entrada atual.
Cultura atual.
Para obter mais informações sobre o suporte a idiomas no WPF, consulte a postagem no blog do WPF sobre recursos do .NET Framework 4.6.1.
Suporte adicional para dicionários personalizados por usuário
No .NET Framework 4.6.1, o WPF reconhece dicionários personalizados registrados globalmente. Essa funcionalidade está disponível além da capacidade de registrá-las por controle.
Em versões anteriores do WPF, dicionários personalizados não reconheceram palavras excluídas e listas de AutoCorreção. Eles têm suporte no Windows 8.1 e no Windows 10 por meio do uso de arquivos que podem ser colocados no %AppData%\Microsoft\Spelling\<language tag> diretório. As seguintes regras se aplicam a estes arquivos:
Os arquivos devem ter extensões de .dic (para palavras adicionadas), .exc (para palavras excluídas) ou .acl (para AutoCorreção).
Os arquivos devem ser texto sem formatação UTF-16 LE que começa com a Marca de Ordem de Bytes (BOM).
Cada linha deve consistir em uma palavra (nas listas de palavras adicionadas e excluídas) ou um par de autocorreção com as palavras separadas por uma barra vertical ("|") (na lista de palavras AutoCorreção).
Esses arquivos são considerados somente leitura e não são modificados pelo sistema.
Observação
Esses novos formatos de arquivo não têm suporte diretamente pelas APIs de verificação ortográfica do WPF e os dicionários personalizados fornecidos ao WPF em aplicativos devem continuar a usar arquivos .lex.
Amostras
Há vários exemplos do WPF no repositório GitHub da Microsoft/WPF-Samples . Ajude-nos a melhorar nossos exemplos enviando-nos uma solicitação pull ou abrindo um problema do GitHub.
Extensões do DirectX
O WPF inclui um pacote NuGet que fornece novas implementações D3DImage que facilitam a interoperação com conteúdo DX10 e Dx11. O código deste pacote foi de software livre e está disponível no GitHub.
Windows Workflow Foundation: Transações
Agora Transaction.EnlistPromotableSinglePhase , o método pode usar um gerenciador de transações distribuído diferente do MSDTC para promover a transação. Faça isso especificando um identificador do promotor de transações GUID para a nova Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) sobrecarga. Se essa operação for bem-sucedida, haverá limitações colocadas nos recursos da transação. Depois que um promotor de transações não MSDTC é inscrito, os seguintes métodos lançam um TransactionPromotionException porque esses métodos exigem promoção para MSDTC:
Depois que um promotor de transações não MSDTC for inscrito, ele deverá ser usado para futuras inscrição duráveis usando protocolos definidos por ele. O Guid promotor de transações pode ser obtido usando a PromoterType propriedade. Quando a transação é promovida, o promotor de transações fornece uma Byte matriz que representa o token promovido. Um aplicativo pode obter o token promovido para uma transação promovida não MSDTC com o GetPromotedToken método.
Os usuários da nova Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) sobrecarga devem seguir uma sequência de chamadas específica para que a operação de promoção seja concluída com êxito. Essas regras estão documentadas na documentação do método.
Profiling
A API de criação de perfil não gerenciada foi aprimorada da seguinte maneira:
Melhor suporte para acessar PDBs na interface ICorProfilerInfo7 .
No ASP.NET Core, está se tornando muito mais comum que assemblies sejam compilados na memória pelo Roslyn. Para desenvolvedores que fazem ferramentas de criação de perfil, isso significa que PDBs que historicamente foram serializados em disco podem não estar mais presentes. As ferramentas do Criador de Perfil geralmente usam PDBs para mapear o código de volta para linhas de origem para tarefas como cobertura de código ou análise de desempenho linha a linha. A interface ICorProfilerInfo7 agora inclui dois novos métodos, ICorProfilerInfo7::GetInMemorySymbolsLength e ICorProfilerInfo7::ReadInMemorySymbols, para fornecer a essas ferramentas do criador de perfil acesso aos dados do PDB na memória, usando as novas APIs, um criador de perfil pode obter o conteúdo de um PDB na memória como uma matriz de bytes e processá-los ou serializá-los em disco.
Melhor instrumentação com a interface ICorProfiler.
Os criadores de perfil que estão usando a
ICorProfilerfuncionalidade de APIs ReJit para instrumentação dinâmica agora podem modificar alguns metadados. Anteriormente, essas ferramentas podiam instrumentar IL a qualquer momento, mas os metadados só podiam ser modificados no tempo de carregamento do módulo. Como IL se refere a metadados, isso limitou os tipos de instrumentação que poderiam ser feitos. Levantamos alguns desses limites adicionando o método ICorProfilerInfo7::ApplyMetaData para dar suporte a um subconjunto de edições de metadados após o carregamento do módulo, em particular adicionando novosAssemblyRefregistrosTypeRef, ,TypeSpeceMemberRefMemberSpecUserString. Essa alteração possibilita uma gama muito mais ampla de instrumentação on-the-fly.
PDBs do NGEN (Native Image Generator)
O rastreamento de eventos entre máquinas permite que os clientes criem o perfil de um programa no Computador A e examinem os dados de criação de perfil com mapeamento de linha de origem no Machine B. Usando versões anteriores do .NET Framework, o usuário copiaria todos os módulos e imagens nativas do computador com perfil para o computador de análise que contém o IL PDB para criar o mapeamento de origem para nativo. Embora esse processo possa funcionar bem quando os arquivos são relativamente pequenos, como para aplicativos de telefone, os arquivos podem ser muito grandes em sistemas de área de trabalho e exigem tempo significativo para copiar.
Com PDBs Ngen, o NGen pode criar um PDB que contém o mapeamento IL-to-native sem uma dependência do IL PDB. Em nosso cenário de rastreamento de eventos entre máquinas, tudo o que é necessário é copiar o PDB de imagem nativa gerado pelo Computador A para o Computador B e usar APIs de Acesso à Interface de Depuração para ler o mapeamento de origem do IL PDBto-IL e o mapeamento IL-to-native da imagem nativa do PDB. A combinação de ambos os mapeamentos fornece um mapeamento de origem para nativo. Como o PDB de imagem nativa é muito menor do que todos os módulos e imagens nativas, o processo de cópia do Computador A para o Computador B é muito mais rápido.
Novidades no .NET 2015
O .NET 2015 apresenta o .NET Framework 4.6 e o .NET Core. Alguns novos recursos se aplicam a ambos e outros recursos são específicos para o .NET Framework 4.6 ou .NET Core.
ASP.NET Core
O .NET 2015 inclui ASP.NET Core, que é uma implementação do .NET enxuta para a criação de aplicativos modernos baseados em nuvem. ASP.NET Core é modular, portanto, você pode incluir somente os recursos necessários em seu aplicativo. Ele pode ser hospedado no IIS ou auto-hospedado em um processo personalizado e você pode executar aplicativos com versões diferentes do .NET Framework no mesmo servidor. Ele inclui um novo sistema de configuração de ambiente que foi projetado para implantação em nuvem.
MVC, API Web e Páginas da Web são unificadas em uma única estrutura chamada MVC 6. Você cria aplicativos ASP.NET Core por meio de ferramentas no Visual Studio 2015 ou posterior. Seus aplicativos existentes funcionarão no novo .NET Framework; no entanto, para criar um aplicativo que usa o MVC 6 ou o SignalR 3, você deve usar o sistema de projetos no Visual Studio 2015 ou posterior.
Para obter informações, consulte ASP.NET Core.
Atualizações do ASP.NET
API baseada em tarefa para liberação de resposta assíncrona
ASP.NET agora fornece uma API simples baseada em tarefa para liberação de resposta assíncrona, HttpResponse.FlushAsyncque permite que as respostas sejam liberadas de forma assíncrona usando o suporte do
async/awaitseu idioma.A associação de modelo dá suporte a métodos de retorno de tarefa
No .NET Framework 4.5, ASP.NET adicionado o recurso model binding que habilitou uma abordagem extensível e focada em código para operações de dados baseadas em CRUD em páginas do Web Forms e controles de usuário. O sistema de Model Binding agora dá suporte a métodos Taskde associação de modelo de retorno. Esse recurso permite que os desenvolvedores do Web Forms obtenham os benefícios de escalabilidade da assíncrona com a facilidade do sistema de associação de dados ao usar versões mais recentes de ORMs, incluindo o Entity Framework.
A associação de modelo assíncrono é controlada pela
aspnet:EnableAsyncModelBindingconfiguração.<appSettings> <add key=" aspnet:EnableAsyncModelBinding" value="true|false" /> </appSettings>Em aplicativos, o .NET Framework 4.6 de destino, ele usa como padrão
true. Em aplicativos em execução no .NET Framework 4.6 que visam uma versão anterior do .NET Framework, ele éfalsepor padrão. Ele pode ser habilitado definindo a configuração comotrue.Suporte a HTTP/2 (Windows 10)
HTTP/2 é uma nova versão do protocolo HTTP que fornece uma utilização de conexão muito melhor (menos viagens de ida e volta entre o cliente e o servidor), resultando no carregamento de página da Web de latência mais baixa para os usuários. As páginas da Web (em oposição aos serviços) se beneficiam mais de HTTP/2, já que o protocolo otimiza para vários artefatos que estão sendo solicitados como parte de uma única experiência. O suporte a HTTP/2 foi adicionado ao ASP.NET no .NET Framework 4.6. Como a funcionalidade de rede existe em várias camadas, novos recursos eram necessários no Windows, no IIS e em ASP.NET para habilitar HTTP/2. Você deve estar executando no Windows 10 para usar HTTP/2 com ASP.NET.
Também há suporte para HTTP/2 e ativado por padrão para aplicativos da Plataforma Universal do Windows (UWP) do Windows 10 que usam a System.Net.Http.HttpClient API.
Para fornecer uma maneira de usar o recurso PUSH_PROMISE em aplicativos ASP.NET, um novo método com duas sobrecargas PushPromise(String) ePushPromise(String, String, NameValueCollection)HttpResponse.
Observação
Embora o ASP.NET Core dê suporte a HTTP/2, o suporte para o recurso PUSH PROMISE ainda não foi adicionado.
O navegador e o servidor Web (IIS no Windows) fazem todo o trabalho. Você não precisa fazer nenhum trabalho pesado para seus usuários.
A maioria dos principais navegadores dá suporte a HTTP/2, portanto, é provável que os usuários se beneficiem do suporte http/2 se o servidor der suporte a ele.
Suporte para o protocolo de associação de token
A Microsoft e o Google têm colaborado em uma nova abordagem para autenticação, chamada de Protocolo de Associação de Token. A premissa é que os tokens de autenticação (no cache do navegador) podem ser roubados e usados por criminosos para acessar recursos seguros (por exemplo, sua conta bancária) sem exigir sua senha ou qualquer outro conhecimento privilegiado. O novo protocolo visa atenuar esse problema.
O Protocolo de Associação de Token será implementado no Windows 10 como um recurso de navegador. ASP.NET aplicativos participarão do protocolo, para que os tokens de autenticação sejam validados como legítimos. As implementações do cliente e do servidor estabelecem a proteção de ponta a ponta especificada pelo protocolo.
Algoritmos de hash de cadeia de caracteres aleatórios
O .NET Framework 4.5 introduziu um algoritmo de hash de cadeia de caracteres aleatório. No entanto, não foi suportado por ASP.NET devido a alguns recursos ASP.NET dependiam de um código hash estável. No .NET Framework 4.6, agora há suporte para algoritmos de hash de cadeia de caracteres aleatórios. Para habilitar esse recurso, use a
aspnet:UseRandomizedStringHashAlgorithmconfiguração de configuração.<appSettings> <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" /> </appSettings>
ADO.NET
O .NET do ADO agora dá suporte ao recurso Always Encrypted disponível no SQL Server 2016. Com o Always Encrypted, o SQL Server pode executar operações em dados criptografados e o melhor de todas as chaves de criptografia reside com o aplicativo dentro do ambiente confiável do cliente e não no servidor. O Always Encrypted protege os dados do cliente para que os DBAs não tenham acesso a dados de texto sem formatação. A criptografia e a descriptografia de dados ocorrem de forma transparente no nível do driver, minimizando as alterações que precisam ser feitas em aplicativos existentes. Para obter detalhes, consulte Always Encrypted (Mecanismo de Banco de Dados) e Always Encrypted (desenvolvimento do cliente).
Compilador JIT de 64 bits para código gerenciado
O .NET Framework 4.6 apresenta uma nova versão do compilador JIT de 64 bits (originalmente denominado RyuJIT). O novo compilador de 64 bits fornece melhorias significativas de desempenho em relação ao compilador JIT de 64 bits mais antigo. O novo compilador de 64 bits está habilitado para processos de 64 bits em execução na parte superior do .NET Framework 4.6. Seu aplicativo será executado em um processo de 64 bits se ele for compilado como 64 bits ou AnyCPU e estiver em execução em um sistema operacional de 64 bits. Embora tenha sido tomado cuidado para tornar a transição para o novo compilador o mais transparente possível, as alterações no comportamento são possíveis.
O novo compilador JIT de 64 bits também inclui recursos de aceleração de SIMD de hardware quando associado a tipos habilitados para SIMD no namespace, o System.Numerics que pode produzir boas melhorias de desempenho.
Melhorias do carregador de assembly
O carregador de assembly agora usa a memória com mais eficiência descarregando assemblies IL depois que uma imagem NGEN correspondente é carregada. Essa alteração diminui a memória virtual, que é particularmente benéfica para aplicativos grandes de 32 bits (como o Visual Studio) e também salva memória física.
Alterações na biblioteca de classes base
Muitas novas APIs foram adicionadas ao .NET Framework 4.6 para habilitar cenários-chave. Elas incluem as seguintes alterações e adições:
Implementações de T> IReadOnlyCollection<
Coleções adicionais implementam IReadOnlyCollection<T> como Queue<T> e Stack<T>.
CultureInfo.CurrentCulture e CultureInfo.CurrentUICulture
As CultureInfo.CurrentCulture propriedades e CultureInfo.CurrentUICulture agora são leitura-gravação em vez de somente leitura. Se você atribuir um novo CultureInfo objeto a essas propriedades, a cultura de thread atual definida pela
Thread.CurrentThread.CurrentCulturepropriedade e a cultura de thread de interface doThread.CurrentThread.CurrentUICultureusuário atual definida pelas propriedades também serão alteradas.Aprimoramentos na GC (coleta de lixo)
A GC classe agora inclui TryStartNoGCRegion e EndNoGCRegion métodos que permitem que você desautorize a coleta de lixo durante a execução de um caminho crítico.
Uma nova sobrecarga do GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) método permite que você controle se o heap de objetos pequeno e o heap de objetos grandes são varridos e compactados ou varridos apenas.
Tipos habilitados para SIMD
O System.Numerics namespace agora inclui vários tipos habilitados para SIMD, como Matrix3x2, , Matrix4x4, Plane, Quaternion, Vector2, e Vector3Vector4.
Como o novo compilador JIT de 64 bits também inclui recursos de aceleração de SIMD de hardware, há melhorias de desempenho especialmente significativas ao usar os tipos habilitados para SIMD com o novo compilador JIT de 64 bits.
Atualizações de criptografia
A System.Security.Cryptography API está sendo atualizada para dar suporte às APIs de criptografia CNG do Windows. As versões anteriores do .NET Framework se basearam inteiramente em uma versão anterior das APIs de Criptografia do Windows como base para a System.Security.Cryptography implementação. Tivemos solicitações para dar suporte à API CNG, pois ela dá suporte a algoritmos de criptografia modernos, que são importantes para determinadas categorias de aplicativos.
O .NET Framework 4.6 inclui os seguintes novos aprimoramentos para dar suporte às APIs de criptografia CNG do Windows:
Um conjunto de métodos de extensão para certificados X509 e
System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), quando possível,System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)retornam uma implementação baseada em CNG em vez de uma implementação baseada em CAPI. (Alguns cartões inteligentes, etc., ainda exigem CAPI e as APIs lidam com o fallback).A System.Security.Cryptography.RSACng classe, que fornece uma implementação de CNG do algoritmo RSA.
Aprimoramentos na API RSA para que as ações comuns não exijam mais a conversão. Por exemplo, criptografar dados usando um X509Certificate2 objeto requer código como o seguinte em versões anteriores do .NET Framework.
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey; byte[] oaepEncrypted = rsa.Encrypt(data, true); byte[] pkcs1Encrypted = rsa.Encrypt(data, false);Dim rsa As RSACryptoServiceProvider = CType(cert.PrivateKey, RSACryptoServiceProvider) Dim oaepEncrypted() As Byte = rsa.Encrypt(data, True) Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, False)O código que usa as novas APIs de criptografia no .NET Framework 4.6 pode ser reescrito da seguinte maneira para evitar a conversão.
RSA rsa = cert.GetRSAPrivateKey(); if (rsa == null) throw new InvalidOperationException("An RSA certificate was expected"); byte[] oaepEncrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1); byte[] pkcs1Encrypted = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1);Dim rsa As RSA = cert.GetRSAPrivateKey() If rsa Is Nothing Then Throw New InvalidOperationException("An RSA certificate was expected") End If Dim oaepEncrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1) Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
Suporte para a conversão de datas e horas de ou para a hora do Unix
Os novos métodos a seguir foram adicionados à estrutura para dar suporte à DateTimeOffset conversão de valores de data e hora de ou para a hora do Unix:
Comutadores de compatibilidade
A AppContext classe adiciona um novo recurso de compatibilidade que permite que os gravadores de biblioteca forneçam um mecanismo de aceitação uniforme para novas funcionalidades para seus usuários. Ele estabelece um contrato flexívelmente acoplado entre componentes para comunicar uma solicitação de recusa. Essa funcionalidade normalmente é importante quando uma alteração é feita na funcionalidade existente. Por outro lado, já há uma aceitação implícita para novas funcionalidades.
Com AppContextas bibliotecas, defina e exponha as opções de compatibilidade, enquanto o código que depende delas pode definir essas opções para afetar o comportamento da biblioteca. Por padrão, as bibliotecas fornecem a nova funcionalidade e só a alteram (ou seja, fornecem a funcionalidade anterior) se a opção estiver definida.
Um aplicativo (ou uma biblioteca) pode declarar o valor de um comutador (que é sempre um Boolean valor) definido por uma biblioteca dependente. A opção é sempre implicitamente
false. Definir a opção paratruehabilitá-la. Definir explicitamente a opção parafalsefornecer o novo comportamento.AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)A biblioteca deve verificar se um consumidor declarou o valor da opção e, em seguida, agir adequadamente sobre ela.
if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow)) { // This is the case where the switch value was not set by the application. // The library can choose to get the value of shouldThrow by other means. // If no overrides nor default values are specified, the value should be 'false'. // A false value implies the latest behavior. } // The library can use the value of shouldThrow to throw exceptions or not. if (shouldThrow) { // old code } else { // new code }If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then ' This is the case where the switch value was not set by the application. ' The library can choose to get the value of shouldThrow by other means. ' If no overrides nor default values are specified, the value should be 'false'. ' A false value implies the latest behavior. End If ' The library can use the value of shouldThrow to throw exceptions or not. If shouldThrow Then ' old code Else ' new code End IfÉ benéfico usar um formato consistente para comutadores, pois eles são um contrato formal exposto por uma biblioteca. Veja a seguir dois formatos óbvios.
Alternar. namespace. nome do comutador
Alternar. biblioteca. nome do comutador
Alterações no padrão assíncrono baseado em tarefa (TAP)
Para aplicativos direcionados ao .NET Framework 4.6 e Task<TResult> objetos herdam Task a cultura e a cultura da interface do usuário do thread de chamada. O comportamento de aplicativos destinados a versões anteriores do .NET Framework ou que não têm como destino uma versão específica do .NET Framework não é afetado. Para obter mais informações, consulte a seção "Cultura e operações assíncronas baseadas em tarefas" do tópico da CultureInfo classe.
A System.Threading.AsyncLocal<T> classe permite que você represente dados ambientes que são locais para um determinado fluxo de controle assíncrono, como um
asyncmétodo. Ele pode ser usado para persistir dados entre threads. Você também pode definir um método de retorno de chamada que é notificado sempre que os dados ambientes são alterados porque a AsyncLocal<T>.Value propriedade foi explicitamente alterada ou porque o thread encontrou uma transição de contexto.Três métodos de conveniência, Task.CompletedTaske Task.FromExceptionTask.FromCanceled, foram adicionados ao TAP (padrão assíncrono baseado em tarefa) para retornar tarefas concluídas em um estado específico.
A NamedPipeClientStream classe agora dá suporte à comunicação assíncrona com seu novo ConnectAsync. método.
O EventSource agora dá suporte à gravação no log de eventos
Agora você pode usar a EventSource classe para registrar mensagens administrativas ou operacionais no log de eventos, além de quaisquer sessões etw existentes criadas no computador. No passado, você precisava usar o pacote NuGet Microsoft.Diagnostics.Tracing.EventSource para essa funcionalidade. Essa funcionalidade agora é interna do .NET Framework 4.6.
O pacote NuGet e o .NET Framework 4.6 foram atualizados com os seguintes recursos:
Eventos dinâmicos
Permite eventos definidos "em tempo real" sem criar métodos de evento.
Conteúdos avançados
Permite que classes e matrizes especialmente atribuídas, bem como tipos primitivos, sejam passadas como um conteúdo
Acompanhamento de atividades
Faz com que os eventos Iniciar e Parar marquem eventos entre eles com uma ID que representa todas as atividades ativas no momento.
Para dar suporte a esses recursos, o método sobrecarregado Write foi adicionado à EventSource classe.
WPF (Windows Presentation Foundation)
Melhorias no HDPI
O suporte a HDPI no WPF agora é melhor no .NET Framework 4.6. Foram feitas alterações no arredondamento de layout para reduzir instâncias de recorte em controles com bordas. Por padrão, esse recurso só será habilitado se você TargetFrameworkAttribute estiver definido como .NET Framework 4.6. Os aplicativos destinados a versões anteriores da estrutura, mas que estão em execução no .NET Framework 4.6, podem aceitar o novo comportamento adicionando a seguinte linha à <seção de runtime> do arquivo app.config:
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />As janelas do WPF que abrangem vários monitores com diferentes configurações de DPI (configuração de várias DPI) agora são completamente renderizadas sem regiões apagadas. Você pode recusar esse comportamento adicionando a seguinte linha à
<appSettings>seção do arquivo app.config para desabilitar esse novo comportamento:<add key="EnableMultiMonitorDisplayClipping" value="true"/>O suporte para carregar automaticamente o cursor direito com base na configuração de DPI foi adicionado a System.Windows.Input.Cursor.
O toque é melhor
Os relatórios do cliente sobre o Connect que o toque produz comportamento imprevisível foram abordados no .NET Framework 4.6. O limite de toque duplo para aplicativos da Windows Store e aplicativos WPF agora é o mesmo no Windows 8.1 e superior.
Suporte transparente à janela filho
O WPF no .NET Framework 4.6 dá suporte a janelas filho transparentes no Windows 8.1 e superior. Isso permite que você crie janelas filho não retangulares e transparentes em suas janelas de nível superior. Você pode habilitar esse recurso definindo a HwndSourceParameters.UsesPerPixelTransparency propriedade como
true.
Windows Communication Foundation (WCF)
Suporte a SSL
O WCF agora dá suporte ao SSL versão TLS 1.1 e TLS 1.2, além do SSL 3.0 e TLS 1.0, ao usar o NetTcp com segurança de transporte e autenticação de cliente. Agora é possível selecionar qual protocolo usar ou desabilitar protocolos seguros menores antigos. Isso pode ser feito definindo a SslProtocols propriedade ou adicionando o seguinte a um arquivo de configuração.
<netTcpBinding> <binding> <security mode= "None|Transport|Message|TransportWithMessageCredential" > <transport clientCredentialType="None|Windows|Certificate" protectionLevel="None|Sign|EncryptAndSign" sslProtocols="Ssl3|Tls1|Tls11|Tls12"> </transport> </security> </binding> </netTcpBinding>Enviar mensagens usando conexões HTTP diferentes
O WCF agora permite que os usuários garantam que determinadas mensagens sejam enviadas usando diferentes conexões HTTP subjacentes. Há duas maneiras de fazer isso:
Usando um prefixo de nome de grupo de conexão
Os usuários podem especificar uma cadeia de caracteres que o WCF usará como prefixo para o nome do grupo de conexão. Duas mensagens com prefixos diferentes são enviadas usando conexões HTTP subjacentes diferentes. Defina o prefixo adicionando um par chave/valor à propriedade da Message.Properties mensagem. A chave é "HttpTransportConnectionGroupNamePrefix"; o valor é o prefixo desejado.
Usando fábricas de canais diferentes
Os usuários também podem habilitar um recurso que garante que as mensagens enviadas usando canais criados por diferentes fábricas de canais usem diferentes conexões HTTP subjacentes. Para habilitar esse recurso, os usuários devem definir o seguinte
appSettingcomotrue:<appSettings> <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" /> </appSettings>
WWF (Windows Workflow Foundation)
Agora você pode especificar o número de segundos que um serviço de fluxo de trabalho manterá em uma solicitação de operação fora de ordem quando houver um indicador "não protocolo" pendente antes de cronometrar a solicitação. Um indicador "não protocolo" é um indicador que não está relacionado a atividades de recebimento pendentes. Algumas atividades criam indicadores que não são de protocolo dentro de sua implementação, portanto, pode não ser óbvio que exista um indicador que não seja de protocolo. Elas incluem Estado e Seleção. Portanto, se você tiver um serviço de fluxo de trabalho implementado com um computador de estado ou que contenha uma atividade Pick, provavelmente terá indicadores que não sejam de protocolo. Especifique o intervalo adicionando uma linha como a
appSettingsseguinte à seção do arquivo app.config:<add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>O valor padrão é 60 segundos. Se
valuefor definido como 0, as solicitações fora de ordem serão imediatamente rejeitadas com uma falha com texto semelhante a este:Operation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.Essa é a mesma mensagem que você recebe se uma mensagem de operação fora de ordem for recebida e não houver indicadores que não sejam de protocolo.
Se o valor do
FilterResumeTimeoutInSecondselemento não for zero, haverá indicadores que não são de protocolo e o intervalo de tempo limite expirará, a operação falhará com uma mensagem de tempo limite.Transações
Agora você pode incluir o identificador de transação distribuída para a transação que causou a geração de uma exceção derivada TransactionException . Você faz isso adicionando a seguinte chave à
appSettingsseção do arquivo app.config:<add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>O valor padrão é
false.Relacionamento em Rede
Reutilização do soquete
O Windows 10 inclui um novo algoritmo de rede de alta escalabilidade que faz melhor uso dos recursos do computador reutilizando portas locais para conexões TCP de saída. O .NET Framework 4.6 dá suporte ao novo algoritmo, permitindo que os aplicativos .NET aproveitem o novo comportamento. Nas versões anteriores do Windows, havia um limite de conexão simultâneo artificial (normalmente 16.384, o tamanho padrão do intervalo de portas dinâmicas), o que poderia limitar a escalabilidade de um serviço, causando esgotamento da porta quando carregado.
No .NET Framework 4.6, duas APIs foram adicionadas para habilitar a reutilização de porta, o que efetivamente remove o limite de 64 KB em conexões simultâneas:
O System.Net.Sockets.SocketOptionName valor da enumeração.
A ServicePointManager.ReusePort propriedade.
Por padrão, a ServicePointManager.ReusePort propriedade é
false, a menos que oHWRPortReuseOnSocketBindvalor da chave doHKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319Registro seja definido como 0x1. Para habilitar a reutilização da porta local em conexões HTTP, defina a ServicePointManager.ReusePort propriedade comotrue. Isso faz com que todas as conexões de soquete TCP de HttpClientHttpWebRequest saída usem uma nova opção de soquete do Windows 10, SO_REUSE_UNICASTPORT, que permite a reutilização da porta local.Os desenvolvedores que gravam um aplicativo somente soquetes podem especificar a opção System.Net.Sockets.SocketOptionName ao chamar um método, como Socket.SetSocketOption para que os soquetes de saída reutilizem portas locais durante a associação.
Suporte para nomes de domínio internacionais e PunyCode
Uma nova propriedade, IdnHostfoi adicionada à classe para dar melhor suporte a Uri nomes de domínio internacionais e PunyCode.
Redimensionamento em controles do Windows Forms.
Esse recurso foi expandido no .NET Framework 4.6 para incluir o , , e tipos DataGridViewColumn e ToolStripSplitButton o retângulo especificado pela Bounds propriedade usada ao desenhar um UITypeEditor. DataGridViewComboBoxColumnNumericUpDownDomainUpDown
Esse é um recurso de aceitação. Para habilitá-lo, defina o
EnableWindowsFormsHighDpiAutoResizingelementotrueno arquivo de configuração do aplicativo (app.config):<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>Suporte para codificações de página de código
O .NET Core dá suporte principalmente às codificações Unicode e, por padrão, fornece suporte limitado para codificações de página de código. Você pode adicionar suporte para codificações de página de código disponíveis no .NET Framework, mas sem suporte no .NET Core registrando codificações de página de código com o Encoding.RegisterProvider método. Para obter mais informações, consulte System.Text.CodePagesEncodingProvider.
Nativo do .NET
Aplicativos da Plataforma Universal do Windows (UWP) escritos em C# ou Visual Basic podem aproveitar uma nova tecnologia que compila aplicativos para código nativo em vez de IL. Essa tecnologia produz aplicativos que têm tempos de inicialização e execução mais rápidos. Para obter mais informações, consulte Compilando aplicativos com o .NET Native. Para obter uma visão geral do .NET Native que examina como ele difere da compilação JIT e do NGEN e o que isso significa para seu código, consulte .NET Native e Compilation.
Seus aplicativos são compilados para código nativo por padrão quando você os compila com o Visual Studio 2015 ou posterior. Para obter mais informações, consulte Introdução ao .NET Native.
Para dar suporte à depuração de aplicativos nativos do .NET, novas interfaces e enumerações foram adicionadas à API de depuração não gerenciada. Para obter mais informações, consulte Depuração (Referência de API não gerenciada).
Pacotes do .NET Framework de software livre
Pacotes do .NET Core, como coleções imutáveis, APIs SIMD e APIs de rede, como as encontradas no System.Net.Http namespace, agora estão disponíveis como pacotes de software livre no GitHub. Para acessar o código, consulte .NET no GitHub. Para obter mais informações e como contribuir para esses pacotes, consulte Introdução ao .NET, Home Page do .NET no GitHub.
Novidades no .NET Framework 4.5.2
Novas APIs para aplicativos ASP.NET. O novo HttpResponse.AddOnSendingHeaders e HttpResponseBase.AddOnSendingHeaders os métodos permitem inspecionar e modificar cabeçalhos de resposta e código de status à medida que a resposta está sendo liberada para o aplicativo cliente. Considere usar esses métodos em vez dos PreSendRequestHeaders eventos e PreSendRequestContent eles são mais eficientes e confiáveis.
O HostingEnvironment.QueueBackgroundWorkItem método permite agendar pequenos itens de trabalho em segundo plano. ASP.NET controla esses itens e impede que o IIS encerre abruptamente o processo de trabalho até que todos os itens de trabalho em segundo plano tenham sido concluídos. Esse método não pode ser chamado fora de um domínio de aplicativo gerenciado ASP.NET.
O novo HttpResponse.HeadersWritten e HttpResponseBase.HeadersWritten as propriedades retornam valores boolianos que indicam se os cabeçalhos de resposta foram gravados. Você pode usar essas propriedades para garantir que as chamadas para APIs como HttpResponse.StatusCode (que geram exceções se os cabeçalhos tiverem sido gravados) sejam bem-sucedidas.
Redimensionamento em controles do Windows Forms. Esse recurso foi expandido. Agora você pode usar a configuração de DPI do sistema para redimensionar componentes dos seguintes controles adicionais (por exemplo, a seta suspensa em caixas de combinação):
Esse é um recurso de aceitação. Para habilitá-lo, defina o
EnableWindowsFormsHighDpiAutoResizingelementotrueno arquivo de configuração do aplicativo (app.config):<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>Novo recurso de fluxo de trabalho. Um gerenciador de recursos que está usando o EnlistPromotableSinglePhase método (e, portanto, implementando a IPromotableSinglePhaseNotification interface) pode usar o novo Transaction.PromoteAndEnlistDurable método para solicitar o seguinte:
Promova a transação para uma transação MSDTC (Coordenador de Transações Distribuídas da Microsoft).
Substitua IPromotableSinglePhaseNotification por um ISinglePhaseNotification, que é um alistamento durável que dá suporte a confirmações de fase única.
Isso pode ser feito no mesmo domínio de aplicativo e não requer nenhum código extra não gerenciado para interagir com o MSDTC para executar a promoção. O novo método só pode ser chamado quando há uma chamada pendente do System.TransactionsIPromotableSinglePhaseNotification
Promotemétodo que é implementado pela inscrição promovível.Melhorias na criação de perfil. As novas APIs de criação de perfil não gerenciadas a seguir fornecem uma criação de perfil mais robusta:
- Estrutura COR_PRF_ASSEMBLY_REFERENCE_INFO
- Enumeração COR_PRF_HIGH_MONITOR
- Método GetAssemblyReferences
- Método GetEventMask2
- Método SetEventMask2
- Método AddAssemblyReference
As implementações anteriores
ICorProfilersuportavam o carregamento lento de assemblies dependentes. As novas APIs de criação de perfil exigem que assemblies dependentes injetados pelo criador de perfil sejam carregados imediatamente, em vez de serem carregados depois que o aplicativo for totalmente inicializado. Essa alteração não afeta os usuários das APIs existentesICorProfiler.Melhorias de depuração. As novas APIs de depuração não gerenciadas a seguir fornecem uma melhor integração com um criador de perfil. Agora você pode acessar metadados inseridos pelo criador de perfil, bem como variáveis locais e código produzidos por solicitações ReJIT do compilador durante a depuração de despejo.
Alterações de rastreamento de eventos. O .NET Framework 4.5.2 habilita o rastreamento de atividades baseadas em ETW (Rastreamento de Eventos para Windows) fora do processo para uma área de superfície maior. Isso permite que os fornecedores do APM (Gerenciamento Avançado de Energia) forneçam ferramentas leves que acompanham com precisão os custos de solicitações e atividades individuais que cruzam threads. Esses eventos são gerados somente quando os controladores ETW os habilitam; portanto, as alterações não afetam código ETW gravado anteriormente ou código executado com ETW desabilitado.
Promovendo uma transação e convertendo-a em uma inscrição durável
Transaction.PromoteAndEnlistDurable é uma nova API adicionada ao .NET Framework 4.5.2 e 4.6:
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] public Enlistment PromoteAndEnlistDurable(Guid resourceManagerIdentifier, IPromotableSinglePhaseNotification promotableNotification, ISinglePhaseNotification enlistmentNotification, EnlistmentOptions enlistmentOptions)<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name:="FullTrust")> public Function PromoteAndEnlistDurable(resourceManagerIdentifier As Guid, promotableNotification As IPromotableSinglePhaseNotification, enlistmentNotification As ISinglePhaseNotification, enlistmentOptions As EnlistmentOptions) As EnlistmentO método pode ser usado por uma inscrição criada anteriormente em Transaction.EnlistPromotableSinglePhase resposta ao ITransactionPromoter.Promote método. Ele solicita
System.Transactionspromover a transação para uma transação MSDTC e "converter" a inscrição promovível em um alistamento durável. Depois que esse método for concluído com êxito, a IPromotableSinglePhaseNotification interface não será mais referenciadaSystem.Transactionse quaisquer notificações futuras chegarão na interface fornecida ISinglePhaseNotification . A inscrição em questão deve atuar como um alistamento durável, dando suporte ao registro em log e recuperação de transações. Consulte Transaction.EnlistDurable para obter detalhes. Além disso, a inscrição deve dar suporte ISinglePhaseNotification. Esse método só pode ser chamado durante o processamento de uma ITransactionPromoter.Promote chamada. Se esse não for o caso, uma TransactionException exceção será gerada.
Novidades no .NET Framework 4.5.1
Atualizações de abril de 2014:
O Visual Studio 2013 Update 2 inclui atualizações para os modelos da Biblioteca de Classes Portátil para dar suporte a estes cenários:
Você pode usar APIs do Windows Runtime em bibliotecas portáteis direcionadas ao Windows 8.1, Windows Phone 8.1 e Windows Phone Silverlight 8.1.
Você pode incluir XAML (tipos Windows.UI.XAML) em bibliotecas portáteis ao direcionar o Windows 8.1 ou o Windows Phone 8.1. Há suporte para os seguintes modelos XAML: página em branco, dicionário de recursos, controle de modelo e controle de usuário.
Você pode criar um componente portátil do Windows Runtime (arquivo .winmd) para uso em aplicativos da Store destinados ao Windows 8.1 e ao Windows Phone 8.1.
Você pode redirecionar uma biblioteca de classes da Windows Store ou da Windows Phone Store como uma Biblioteca de Classes Portátil.
Para obter mais informações sobre essas alterações, consulte a Biblioteca de Classes Portátil.
O conjunto de conteúdo do .NET Framework agora inclui a documentação do .NET Native, que é uma tecnologia de pré-compilação para compilar e implantar aplicativos do Windows. O .NET Native compila seus aplicativos diretamente para código nativo, em vez de il (linguagem intermediária), para melhorar o desempenho. Para obter detalhes, consulte Compilando aplicativos com o .NET Native.
A origem de referência do .NET Framework fornece uma nova experiência de navegação e funcionalidade aprimorada. Agora você pode navegar pelo código-fonte do .NET Framework online, baixar a referência para exibição offline e percorrer as fontes (incluindo patches e atualizações) durante a depuração. Para obter mais informações, consulte a entrada do blog Uma nova pesquisa para a origem de referência do .NET.
Novos recursos e aprimoramentos nas classes base no .NET Framework 4.5.1 incluem:
Redirecionamento automático de associação para assemblies. A partir do Visual Studio 2013, quando você compila um aplicativo direcionado ao .NET Framework 4.5.1, os redirecionamentos de associação poderão ser adicionados ao arquivo de configuração do aplicativo se seu aplicativo ou seus componentes fizerem referência a várias versões do mesmo assembly. Você também pode habilitar esse recurso para projetos destinados a versões mais antigas do .NET Framework. Para obter mais informações, consulte Como habilitar e desabilitar o redirecionamento automático de associação.
Capacidade de coletar informações de diagnóstico para ajudar os desenvolvedores a melhorar o desempenho de aplicativos de servidor e nuvem. Para obter mais informações, consulte os métodos e WriteEventWithRelatedActivityIdCore os WriteEventWithRelatedActivityId métodos na EventSource classe.
Capacidade de compactar explicitamente o LOH (heap de objetos grandes) durante a coleta de lixo. Para obter mais informações, consulte a GCSettings.LargeObjectHeapCompactionMode propriedade.
Melhorias de desempenho adicionais, como suspensão de aplicativo ASP.NET, aprimoramentos de JIT de vários núcleos e inicialização de aplicativo mais rápida após uma atualização do .NET Framework. Para obter detalhes, consulte o comunicado do .NET Framework 4.5.1 e a postagem do blog de suspensão do aplicativo ASP.NET .
As melhorias nos Windows Forms incluem:
Redimensionamento em controles do Windows Forms. Você pode usar a configuração de DPI do sistema para redimensionar componentes de controles (por exemplo, os ícones que aparecem em uma grade de propriedades) optando por uma entrada no arquivo de configuração do aplicativo (app.config) para seu aplicativo. Atualmente, esse recurso tem suporte nos seguintes controles do Windows Forms:
- PropertyGrid
- TreeView
- Alguns aspectos do (consulte novos DataGridViewrecursos na 4.5.2 para controles adicionais com suporte)
Para habilitar esse recurso, adicione um novo <elemento appSettings> ao arquivo de configuração (app.config) e defina o
EnableWindowsFormsHighDpiAutoResizingelemento comotrue:<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
As melhorias ao depurar seus aplicativos do .NET Framework no Visual Studio 2013 incluem:
Retornar valores no depurador do Visual Studio. Quando você depura um aplicativo gerenciado no Visual Studio 2013, a janela Autos exibe tipos de retorno e valores para métodos. Essas informações estão disponíveis para aplicativos da área de trabalho, da Windows Store e do Windows Phone. Para obter mais informações, consulte Examinar valores retornados de chamadas de método.
Editar e continuar para aplicativos de 64 bits. O Visual Studio 2013 dá suporte ao recurso Editar e Continuar para aplicativos gerenciados de 64 bits para área de trabalho, Windows Store e Windows Phone. As limitações existentes permanecem em vigor para aplicativos de 32 bits e 64 bits (consulte a última seção do artigo C#(Alterações de Código Com Suporte ).
Depuração com reconhecimento assíncrono. Para facilitar a depuração de aplicativos assíncronos no Visual Studio 2013, a pilha de chamadas oculta o código de infraestrutura fornecido pelos compiladores para dar suporte à programação assíncrona e também cadeias em quadros pai lógicos para que você possa seguir a execução do programa lógico com mais clareza. Uma janela Tarefas substitui a janela Tarefas Paralelas e exibe tarefas relacionadas a um ponto de interrupção específico e também exibe outras tarefas que estão ativas ou agendadas no aplicativo no momento. Você pode ler sobre esse recurso na seção "Depuração com reconhecimento assíncrono" do comunicado do .NET Framework 4.5.1.
Melhor suporte à exceção para componentes do Windows Runtime. No Windows 8.1, exceções que surgem de aplicativos da Windows Store preservam informações sobre o erro que causou a exceção, mesmo em limites de idioma. Você pode ler sobre esse recurso na seção "Desenvolvimento de aplicativos da Windows Store" do comunicado do .NET Framework 4.5.1.
A partir do Visual Studio 2013, você pode usar a Ferramenta de Otimização Guiada de Perfil Gerenciado (Mpgo.exe) para otimizar aplicativos da Windows 8.x Store, bem como aplicativos da área de trabalho.
Para obter novos recursos no ASP.NET 4.5.1, consulte ASP.NET e As Ferramentas Web para Notas de Versão do Visual Studio 2013.
Novidades no .NET Framework 4.5
Classes base
Capacidade de reduzir as reinicializações do sistema detectando e fechando aplicativos do .NET Framework 4 durante a implantação. Consulte a redução de reinicializações do sistema durante instalações do .NET Framework 4.5.
Suporte para matrizes maiores que 2 GB (gigabytes) em plataformas de 64 bits. Esse recurso pode ser habilitado no arquivo de configuração do aplicativo. Consulte o <elemento gcAllowVeryLargeObjects>, que também lista outras restrições no tamanho do objeto e no tamanho da matriz.
Melhor desempenho por meio da coleta de lixo em segundo plano para servidores. Quando você usa a coleta de lixo do servidor no .NET Framework 4.5, a coleta de lixo em segundo plano é habilitada automaticamente. Consulte a seção Coleta de Lixo do Servidor em Segundo Plano do tópico Conceitos Básicos da Coleta de Lixo .
Compilação JIT (just-in-time) em segundo plano, que opcionalmente está disponível em processadores de vários núcleos para melhorar o desempenho do aplicativo. Consulte ProfileOptimization.
Capacidade de limitar por quanto tempo o mecanismo de expressão regular tentará resolver uma expressão regular antes de atingir o tempo limite. Consulte a Regex.MatchTimeout propriedade.
Capacidade de definir a cultura padrão para um domínio de aplicativo. Veja a CultureInfo classe.
Suporte ao console para codificação Unicode (UTF-16). Veja a Console classe.
Suporte para controle de versão de dados de ordenação e comparação de cadeia de caracteres culturais. Veja a SortVersion classe.
Melhor desempenho ao recuperar recursos. Consulte Pacote e implante recursos.
Melhorias de compactação zip para reduzir o tamanho de um arquivo compactado. Consulte o System.IO.Compression namespace.
Capacidade de personalizar um contexto de reflexão para substituir o comportamento de reflexão padrão por meio da CustomReflectionContext classe.
Suporte para a versão 2008 do padrão Nomes de Domínio Internacionalizados em Aplicativos (IDNA) quando a System.Globalization.IdnMapping classe é usada no Windows 8.
Delegação de comparação de cadeia de caracteres ao sistema operacional, que implementa o Unicode 6.0, quando o .NET Framework é usado no Windows 8. Ao executar em outras plataformas, o .NET Framework inclui seus próprios dados de comparação de cadeia de caracteres, que implementa o Unicode 5.x. Consulte a String classe e a seção Comentários da SortVersion classe.
Capacidade de calcular os códigos de hash para cadeias de caracteres por domínio de aplicativo. Consulte <o elemento UseRandomizedStringHashAlgorithm>.
Suporte à reflexão de tipo dividido entre Type classes e TypeInfo entre tipos. Consulte Reflexão no .NET Framework para Aplicativos da Windows Store.
MEF (Managed Extensibility Framework)
No .NET Framework 4.5, o MEF (Managed Extensibility Framework) fornece os seguintes novos recursos:
Suporte para tipos genéricos.
Modelo de programação baseado em convenção que permite criar partes com base em convenções de nomenclatura em vez de atributos.
Vários escopos.
Um subconjunto de MEF que você pode usar ao criar aplicativos da Windows 8.x Store. Esse subconjunto está disponível como um pacote para download da Galeria do NuGet. Para instalar o pacote, abra seu projeto no Visual Studio, escolha Gerenciar Pacotes NuGet no menu Projeto e pesquise online pelo
Microsoft.Compositionpacote.
Para obter mais informações, consulte MEF (Managed Extensibility Framework).
Operações de arquivo assíncronas
No .NET Framework 4.5, novos recursos assíncronos foram adicionados às linguagens C# e Visual Basic. Esses recursos adicionam um modelo baseado em tarefas para executar operações assíncronas. Para usar esse novo modelo, use os métodos assíncronos nas classes de E/S. Consulte e/S de arquivo assíncrono.
Tools
No .NET Framework 4.5, o Gerador de Arquivos de Recurso (Resgen.exe) permite criar um arquivo .resw para uso em aplicativos da Windows 8.x Store de um arquivo .resources inserido em um assembly do .NET Framework. Para obter mais informações, consulte Resgen.exe (Gerador de Arquivos de Recurso).
A Otimização Guiada do Perfil Gerenciado (Mpgo.exe) permite que você melhore o tempo de inicialização do aplicativo, a utilização da memória (tamanho do conjunto de trabalho) e a taxa de transferência otimizando assemblies de imagem nativa. A ferramenta de linha de comando gera dados de perfil para assemblies de aplicativo de imagem nativa. Consulte Mpgo.exe (Ferramenta de Otimização Guiada de Perfil Gerenciado). A partir do Visual Studio 2013, você pode usar Mpgo.exe para otimizar aplicativos da Windows 8.x Store, bem como aplicativos da área de trabalho.
Computação paralela
O .NET Framework 4.5 fornece vários novos recursos e melhorias para computação paralela. Isso inclui melhor desempenho, maior controle, suporte aprimorado para programação assíncrona, uma nova biblioteca de fluxo de dados e suporte aprimorado para depuração paralela e análise de desempenho. Confira a entrada Novidades do Paralelismo no .NET Framework 4.5 na Programação Paralela com o blog do .NET.
web
ASP.NET 4.5 e 4.5.1 adicionam associação de modelo para Web Forms, suporte a WebSocket, manipuladores assíncronos, aprimoramentos de desempenho e muitos outros recursos. Para obter mais informações, consulte os seguintes recursos:
Rede
O .NET Framework 4.5 fornece uma nova interface de programação para aplicativos HTTP. Para obter mais informações, consulte o novo System.Net.Http e System.Net.Http.Headers os namespaces.
O suporte também está incluído para uma nova interface de programação para aceitar e interagir com uma conexão WebSocket usando as classes existentes HttpListener e relacionadas. Para obter mais informações, consulte o novo System.Net.WebSockets namespace e a HttpListener classe.
Além disso, o .NET Framework 4.5 inclui os seguintes aprimoramentos de rede:
Suporte a URI compatível com RFC. Para obter mais informações, consulte Uri e classes relacionadas.
Suporte para análise de IDN (Nome de Domínio Internacionalizado). Para obter mais informações, consulte Uri e classes relacionadas.
Suporte para EAI (Internacionalização de Endereços de Email). Para obter mais informações, consulte o System.Net.Mail namespace.
Suporte aprimorado ao IPv6. Para obter mais informações, consulte o System.Net.NetworkInformation namespace.
Suporte ao soquete de modo duplo. Para obter mais informações, consulte as classes e TcpListener as Socket classes.
Windows Presentation Foundation (WPF)
No .NET Framework 4.5, o WPF (Windows Presentation Foundation) contém alterações e melhorias nas seguintes áreas:
O novo Ribbon controle, que permite implementar uma interface do usuário da faixa de opções que hospeda uma Barra de Ferramentas de Acesso Rápido, Menu de Aplicativo e guias.
A nova INotifyDataErrorInfo interface, que dá suporte à validação de dados síncrona e assíncrona.
Novos recursos para as classes e Dispatcher as VirtualizingPanel classes.
Desempenho aprimorado ao exibir grandes conjuntos de dados agrupados e acessando coleções em threads que não são da interface do usuário.
Associação de dados a propriedades estáticas, associação de dados a tipos personalizados que implementam a ICustomTypeProvider interface e recuperação de informações de associação de dados de uma expressão de associação.
Reposicionamento de dados à medida que os valores são alterados (formatação dinâmica).
Capacidade de verificar se o contexto de dados de um contêiner de item está desconectado.
Capacidade de definir a quantidade de tempo que deve decorrer entre as alterações de propriedade e as atualizações da fonte de dados.
Suporte aprimorado para implementar padrões de eventos fracos. Além disso, os eventos agora podem aceitar extensões de marcação.
Windows Communication Foundation (WCF)
No .NET Framework 4.5, os seguintes recursos foram adicionados para tornar mais simples gravar e manter aplicativos do WCF (Windows Communication Foundation):
Simplificação de arquivos de configuração gerados.
Suporte para desenvolvimento de primeiro contrato.
Capacidade de configurar ASP.NET modo de compatibilidade com mais facilidade.
Alterações nos valores de propriedade de transporte padrão para reduzir a probabilidade de que você terá que defini-los.
Atualizações para a XmlDictionaryReaderQuotas classe para reduzir a probabilidade de que você terá que configurar manualmente cotas para leitores de dicionário XML.
Validação de arquivos de configuração do WCF pelo Visual Studio como parte do processo de build, para que você possa detectar erros de configuração antes de executar seu aplicativo.
Novo suporte de streaming assíncrono.
Novo mapeamento de protocolo HTTPS para facilitar a exposição de um ponto de extremidade por HTTPS com o IIS (Serviços de Informações da Internet).
Capacidade de gerar metadados em um único documento WSDL acrescentando
?singleWSDLà URL do serviço.Suporte a Websockets para habilitar a comunicação bidirecional verdadeira nas portas 80 e 443 com características de desempenho semelhantes ao transporte TCP.
Suporte para configurar serviços no código.
Dicas de ferramentas do Editor XML.
ChannelFactory suporte ao cache.
Suporte à compactação de codificador binário.
Suporte para um transporte UDP que permite que os desenvolvedores escrevam serviços que usam mensagens "disparar e esquecer". Um cliente envia uma mensagem para um serviço e não espera resposta do serviço.
Capacidade de dar suporte a vários modos de autenticação em um único ponto de extremidade WCF ao usar a segurança de transporte e transporte HTTP.
Suporte para serviços WCF que usam IDNs (nomes de domínio internacionalizados).
Para obter mais informações, confira as novidades no Windows Communication Foundation.
Windows Workflow Foundation (WF)
No .NET Framework 4.5, vários novos recursos foram adicionados ao Windows Workflow Foundation (WF), incluindo:
Fluxos de trabalho do computador de estado, que foram introduzidos pela primeira vez como parte do .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). Essa atualização incluiu várias novas classes e atividades que permitiram que os desenvolvedores criassem fluxos de trabalho de computador de estado. Essas classes e atividades foram atualizadas para o .NET Framework 4.5 para incluir:
A capacidade de definir pontos de interrupção em estados.
A capacidade de copiar e colar transições no designer de fluxo de trabalho.
Suporte de designer para criação de transição de gatilho compartilhado.
Atividades para criar fluxos de trabalho de computador de estado, incluindo: StateMachine, Statee Transition.
Recursos aprimorados do Designer de Fluxo de Trabalho, como o seguinte:
Recursos aprimorados de pesquisa de fluxo de trabalho no Visual Studio, incluindo Localização Rápida e Localização em Arquivos.
Capacidade de criar automaticamente uma atividade sequence quando uma segunda atividade filho é adicionada a uma atividade de contêiner e incluir ambas as atividades na atividade Sequência.
Suporte ao movimento panorâmico, que permite que a parte visível de um fluxo de trabalho seja alterada sem usar as barras de rolagem.
Uma nova exibição estrutura de tópicos do documento que mostra os componentes de um fluxo de trabalho em uma exibição de estrutura de tópicos no estilo árvore e permite selecionar um componente no modo de exibição Estrutura de Tópicos do Documento .
Capacidade de adicionar anotações a atividades.
Capacidade de definir e consumir delegados de atividade usando o designer de fluxo de trabalho.
Conexão automática e inserção automática para atividades e transições em fluxos de trabalho de fluxograma e computador de estado.
Armazenamento das informações de estado de exibição para um fluxo de trabalho em um único elemento no arquivo XAML, para que você possa localizar e editar facilmente as informações de estado de exibição.
Uma atividade de contêiner NoPersistScope para impedir que as atividades filho persistam.
Suporte para expressões C#:
Os projetos de fluxo de trabalho que usam o Visual Basic usarão expressões do Visual Basic e os projetos de fluxo de trabalho C# usarão expressões C#.
Os projetos de fluxo de trabalho do C# criados no Visual Studio 2010 e que têm expressões do Visual Basic são compatíveis com projetos de fluxo de trabalho C# que usam expressões C#.
Aprimoramentos de controle de versão:
A nova WorkflowIdentity classe, que fornece um mapeamento entre uma instância de fluxo de trabalho persistente e sua definição de fluxo de trabalho.
Execução lado a lado de várias versões de fluxo de trabalho no mesmo host, incluindo WorkflowServiceHost.
Na Atualização Dinâmica, a capacidade de modificar a definição de uma instância de fluxo de trabalho persistente.
Desenvolvimento de serviço de fluxo de trabalho de primeiro contrato, que fornece suporte para gerar atividades automaticamente para corresponder a um contrato de serviço existente.
Para obter mais informações, consulte As novidades no Windows Workflow Foundation.
Aplicativos .NET para Windows 8.x Store
Os aplicativos da Windows 8.x Store são projetados para fatores de formulário específicos e aproveitam o poder do sistema operacional Windows. Um subconjunto do .NET Framework 4.5 ou 4.5.1 está disponível para a criação de aplicativos da Windows 8.x Store para Windows usando C# ou Visual Basic. Esse subconjunto é chamado de aplicativos .NET para Windows 8.x Store e é discutido em uma visão geral.
Bibliotecas de classes portáteis
O projeto biblioteca de classes portátil no Visual Studio 2012 (e versões posteriores) permite que você escreva e crie assemblies gerenciados que funcionam em várias plataformas do .NET Framework. Usando um projeto da Biblioteca de Classes Portátil, você escolhe as plataformas (como Windows Phone e .NET para aplicativos da Windows 8.x Store) a serem direcionadas. Os tipos e membros disponíveis em seu projeto são automaticamente restritos aos tipos e membros comuns nessas plataformas. Para obter mais informações, consulte a Biblioteca de Classes Portátil.