Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
O .NET Framework é gerido independentemente das atualizações do Windows com correções de bugs de segurança e fiabilidade. Em geral, as atualizações de segurança são lançadas trimestralmente. O .NET Framework continuará incluído no Windows, sem planos para o remover. Não precisas de migrar as tuas aplicações .NET Framework, mas para novos desenvolvimentos, usa .NET em vez de .NET Framework.
Este artigo resume as principais novas funcionalidades 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 informações gerais sobre .NET Framework, consulte Getting Started. Para plataformas suportadas, consulte Requisitos do sistema. Para obter links de download e instruções de instalação, consulte Guia de Instalação.
Observação
A equipa do .NET Framework também lança funcionalidades fora de banda, usando NuGet, para expandir o suporte da plataforma e introduzir novas funcionalidades, como coleções imutáveis e tipos de vetores com SIMD. Para mais informações, consulte Additional Class Libraries and APIs e .NET Framework and Out-of-Band Releases. Veja uma lista completa de pacotes NuGet para .NET Framework.
Introdução do .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árias funcionalidades, mantendo-se um produto muito estável.
Descarregue e instale o .NET Framework 4.8.1
Pode descarregar o .NET Framework 4.8.1 a partir dos 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 respetivas plataformas de servidor a partir do Windows Server 2022. Pode instalar o .NET Framework 4.8.1 usando o instalador 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 .NET Framework 4.8.1 Developer Pack.
O que há de novo no .NET Framework 4.8.1
O .NET Framework 4.8.1 introduz novas funcionalidades nas seguintes áreas:
- Suporte nativo para Arm64
- dicas de ferramentas acessíveis compatíveis com WCAG2.1
- Windows Forms – Melhorias de Acessibilidade
A acessibilidade melhorada, que permite a uma aplicação proporcionar uma experiência adequada aos utilizadores de Tecnologia Assistiva, é um dos principais focos do .NET Framework 4.8.1. Para informações sobre melhorias de acessibilidade no .NET Framework 4.8.1, consulte O que há de novo em acessibilidade no Framework .NET.
O .NET Framework 4.8.1 adiciona suporte nativo para Arm64 à família .NET Framework. Assim, os seus investimentos no vasto ecossistema de aplicações e bibliotecas .NET Framework podem agora tirar partido dos benefícios de executar cargas de trabalho nativamente no Arm64 — nomeadamente 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 que sejam acessíveis a todos. O .NET Framework 4.8.1 oferece duas plataformas de desenvolvimento de UI para Windows, ambas proporcionando aos programadores o suporte necessário para criar aplicações acessíveis. Nas últimas versões, tanto o Windows Forms como o WPF adicionaram novas funcionalidades e corrigiram inúmeros problemas de fiabilidade relacionados com a acessibilidade. Pode ler mais sobre os detalhes do que foi corrigido ou adicionado em cada versão visitando O que há de novo em acessibilidade no .NET Framework.
Nesta versão, tanto o Windows Forms como o WPF melhoraram o tratamento das dicas de ferramenta para as tornar mais acessíveis. Em ambos os casos, as dicas de ferramentas agora estão em conformidade com as diretrizes estabelecidas no conteúdo WCAG2.1 sobre Hover ou Focus guidance. Os requisitos para dicas de ferramentas são:
- As dicas de ferramentas devem ser exibidas ao passar o mouse ou pela navegação do teclado no controlo.
- As dicas de ferramentas devem ser dispensáveis. Ou seja, um simples comando de teclado como Esc deve fechar o tooltip.
- As dicas de ferramenta devem permitir interação ao passar o rato. Os utilizadores devem ser capazes de colocar o cursor do rato sobre o tooltip. Isso possibilita cenários, como o uso de lupa para permitir que usuários com baixa visão leiam as dicas de ferramenta.
- As dicas de ferramentas devem ser persistentes. As dicas de ferramentas não devem desaparecer automaticamente após um certo período de tempo. Em vez disso, as dicas de ferramentas devem ser descartadas pelo usuário movendo o mouse para outro controle ou por um comando de teclado.
No Windows Forms, este suporte está disponível apenas em sistemas operativos Windows 11 ou posteriores. O Windows Forms é uma fina camada gerida em torno da API do Windows, e o novo comportamento do tooltip só ficou disponível no Windows 11. O WPF não tem dependências de versões do sistema operativo para os seus balões de informação acessíveis.
A WPF implementou a maioria dos requisitos para tooltips compatíveis com WCAG2.1 no .NET Framework 4.8. Nesta versão, WPF melhorou a experiência ao garantir que uma dica de ferramenta na janela atual pode ser facilmente ignorada usando a tecla Esc, a tecla Ctrl (isoladamente), ou pela combinação Ctrl+Shift+F10. O escopo da chave de escape foi reduzido nesta versão para se aplicar apenas à janela atual. Anteriormente, aplicava-se a qualquer dica de ferramenta aberta no aplicativo.
O Windows Forms foi a primeira pilha de UI do Windows criada para o .NET Framework. Como tal, foi originalmente criado para utilizar tecnologia de acessibilidade legada, que não atende aos requisitos de acessibilidade atuais. Nesta versão, o Windows Forms abordou várias questões. Para uma lista completa das alterações relacionadas com acessibilidade, visite O que há de novo em acessibilidade no .NET Framework.
Os destaques das melhorias do Windows Forms no .NET Framework 4.8.1 são:
Suporte ao padrão de texto– Windows Forms adicionou suporte para o Padrão de Texto UIA. Esse padrão permite que a tecnologia assistiva percorra o conteúdo de um TextBox ou de um controle baseado em texto semelhante letra por letra. Ele permite que o texto seja selecionado dentro do controle e alterado, e um novo texto seja inserido no cursor. O Windows Forms adicionou este suporte para TextBox, células DataGridView, controlos ComboBox e mais.
Resolver problemas de contraste – Em vários controlos, o Windows Forms alterou a razão de contraste dos retângulos de seleção para ficar mais escura e visível.
Corrigidos vários problemas de DataGridView:
- Os nomes da barra de rolagem foram atualizados para serem consistentes.
- O Narrador agora 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 as células do DataGridViewLink foi atualizada para ter um melhor contraste com o plano de fundo.
Introdução ao .NET Framework 4.8
O .NET Framework 4.8 baseia-se em versões anteriores do .NET Framework 4.x, adicionando muitas correções novas e várias funcionalidades, mantendo-se um produto muito estável.
Descarregue e instale o .NET Framework 4.8
Pode descarregar o .NET Framework 4.8 a partir dos seguintes locais:
O .NET Framework 4.8 pode ser instalado no Windows 10, Windows 8.1, Windows 7 SP1 e nas respetivas plataformas de servidor a partir do Windows Server 2008 R2 SP1. Podes instalar o .NET Framework 4.8 usando o instalador web ou o instalador offline. A maneira recomendada para a maioria dos usuários é usar o instalador da web.
Pode direcionar o .NET Framework 4.8 no Visual Studio 2012 ou posterior, instalando o .NET Framework 4.8 Developer Pack.
Novidades no .NET Framework 4.8
O .NET Framework 4.8 introduz novas funcionalidades nas seguintes áreas:
- Classes de base
- Windows Communication Foundation (WCF)
- Windows Presentation Foundation (WPF)
- Common Language Runtime (Ambiente de Execução de Linguagem Comum)
A acessibilidade melhorada, que permite a uma aplicação proporcionar uma experiência adequada aos utilizadores de Tecnologia Assistiva, continua a ser um foco importante do .NET Framework 4.8. Para informações sobre melhorias de acessibilidade no .NET Framework 4.8, consulte O que há de novo em acessibilidade no .NET Framework.
Classes de base
Impacto reduzido do FIPS na criptografia. Em versões anteriores do .NET Framework, classes de fornecedores criptográficos geridos como SHA256Managed lançam um CryptographicException quando as bibliotecas criptográficas do sistema estão configuradas em "modo FIPS". Essas exceções são lançadas porque as versões gerenciadas das classes de provedor de criptografia, ao contrário das bibliotecas criptográficas do sistema, não passaram pela certificação FIPS (Federal Information Processing Standards) 140-2. Como poucos programadores têm as suas máquinas de desenvolvimento no modo FIPS, as exceções são frequentemente geradas em ambientes de produção.
Por padrão, em aplicações que têm como alvo o .NET Framework 4.8, as seguintes classes de cripto geridas já não apresentam 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 sob a mesma política criptográfica. Os aplicativos que dependem dessas exceções podem restaurar o comportamento anterior definindo a opção AppContext Switch.System.Security.Cryptography.UseLegacyFipsThrow como true. Para obter mais informações, consulte Classes de criptografia gerenciadas 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 utiliza ZLib, uma biblioteca externa nativa para compressão de dados, para fornecer uma implementação do algoritmo de deflate. A versão 4.8 do .NET Framework do clrcompression.dll foi atualizada para usar a versão 1.2.11 do ZLib, que inclui várias melhorias e correções importantes.
Windows Communication Foundation (WCF)
Introdução do ServiceHealthBehavior
Os pontos de verificação de saúde são amplamente utilizados por ferramentas de orquestração para gerir serviços com base no seu estado de saúde. As verificações de integridade também podem ser usadas por ferramentas de monitoramento para rastrear e fornecer notificações sobre a disponibilidade e o desempenho de um serviço.
ServiceHealthBehavior é um comportamento de serviço WCF que amplia IServiceBehavior. Quando um comportamento de serviço é adicionado à coleção ServiceDescription.Behaviors, 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 teste de integridade HTTP/GET.
Publica informações sobre a saúde do serviço. Detalhes específicos do serviço, incluindo estado do serviço, contagens de aceleração e capacidade, podem ser exibidos usando uma solicitação HTTP/GET com a cadeia de caracteres de consulta
?health. A facilidade de acesso a essas informações é importante ao solucionar problemas de um serviço WCF com comportamento incorreto.
Existem duas maneiras de expor o endpoint de saúde e publicar as informações de integridade do serviço WCF.
Por 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, OnListenerFailure, OnThrottlePercentExceeded) e um 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 de consulta e exemplos:
Falha no Despachante:
https://contoso:81/Service1?health&OnDispatcherFailure=455Um código de estado de resposta HTTP 455 é retornado quando o estado de qualquer um dos despachantes de canal é maior que CommunicationState.Opened.
OnListenerFailure:
https://contoso:81/Service1?health&OnListenerFailure=465Um código de estado de resposta HTTP 465 é retornado quando o estado de qualquer um dos ouvintes do canal é maior que CommunicationState.Opened.
OnThrottlePercentExceeded:
https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500Especifica a porcentagem {1 – 100} que aciona 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 500 será retornado.
Se a percentagem estiver entre os valores 70 e 95, 350 é retornado.
Caso contrário, 200 é devolvido.
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)
Melhorias de Alto DPI
No .NET Framework 4.8, o WPF adiciona suporte para a Consciência de DPI Per-Monitor V2 e a Escala de DPI em Modo Misto. Consulte High DPI Desktop Application Development on Windows para informações adicionais sobre desenvolvimento de alto DPI.
.NET Framework 4.8 melhora o suporte para HWNDs alojados e a interoperabilidade Windows Forms em aplicações High-DPI WPF em plataformas que suportam Mixed-Mode DPI scaling, começando com a Atualização de Windows 10 de abril de 2018. Quando os HWNDs ou controlos Windows Forms alojados são criadas como janelas escaladas com DPI em Modo Misto, ao chamar SetThreadDpiHostingBehavior e SetThreadDpiAwarenessContext, podem ser alojados numa aplicação Per-Monitor V2 WPF e são dimensionados e escalados 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 o modo de reconhecimento de DPI v2 por monitor também permite que controlos WPF sejam integrados (ou seja, alojados) numa janela nativa numa aplicação de alta densidade de pixels.
Para habilitar o suporte para Mixed-Mode dimensionamento de DPI alto, pode definir os seguintes interruptores de AppContext no arquivo de configuração da aplicação:
<runtime>
<AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>
Common Language Runtime (Ambiente de Execução de Linguagem Comum)
O tempo de execução 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 baseia-se no compilador JIT do .NET Core 2.1. Muitas das otimizações e todas as correções de bugs feitas ao compilador .NET Core 2.1 JIT estão incluídas no compilador .NET Framework 4.8 JIT.
melhorias NGEN. O runtime melhorou o seu gerenciamento de memória para imagens do Native Image Generator (NGEN), de forma que os dados mapeados a partir das imagens do NGEN não permaneçam residentes na 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. Em versões anteriores do .NET Framework, o runtime analisa todos os assemblies carregados a partir do disco usando o Windows Defender ou software antimalware de terceiros. No entanto, conjuntos carregados de outras fontes, como pelo método Assembly.Load(Byte[]), não são verificados e podem conter malware não detetado. A partir do .NET Framework 4.8 executado no Windows 10, o runtime desencadeia uma análise por soluções antimalware que implementam a Interface de Análise Antimalware (AMSI).
Novidades no .NET Framework 4.7.2
O .NET Framework 4.7.2 inclui novas funcionalidades nas seguintes áreas:
- Classes de base
- ASP.NET
- Networking
- SQL
- WPF
- ClickOnce
Um foco contínuo no .NET Framework 4.7.2 é a melhoria da acessibilidade, que permite a uma aplicação proporcionar uma experiência adequada aos utilizadores de Tecnologia Assistiva. Para informações sobre melhorias de acessibilidade no .NET Framework 4.7.2, consulte O que há de novo em acessibilidade no .NET Framework.
Classes de base
O .NET Framework 4.7.2 apresenta um grande número de melhorias criptográficas, melhor suporte de descompressão para arquivos ZIP e APIs adicionais de coleção.
Novas sobrecargas de RSA.Create e DSA.Create
Os métodos DSA.Create(DSAParameters) e RSA.Create(RSAParameters) permitem fornecer parâmetros-chave ao instanciar uma nova DSA ou RSA chave. Eles permitem que você substitua o código como o seguinte:
// 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 métodos DSA.Create(Int32) e RSA.Create(Int32) permitem gerar novas chaves DSA ou RSA 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
Os construtores Rfc2898DeriveBytes aceitam um nome de algoritmo de hash
A classe Rfc2898DeriveBytes tem três novos construtores com um parâmetro HashAlgorithmName 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 sinalizador de X509KeyStorageFlags.EphemeralKeySet é especificado no construtor X509Certificate2 ou numa das sobrecargas do método X509Certificate2.Import, as chaves privadas serão carregadas como chaves efémeras. Isso impede que as chaves fiquem visíveis no disco. No entanto:
Como as chaves não são persistentes no disco, os certificados carregados com esse sinalizador não são bons candidatos para adicionar a uma X509Store.
As chaves carregadas desta forma são quase sempre carregadas via Windows CNG. Portanto, os chamadores devem acessar a chave privada chamando métodos de extensão, como cert. GetRSAPrivateKey(). A propriedade X509Certificate2.PrivateKey não funciona.
Como a propriedade X509Certificate2.PrivateKey herdada não funciona com certificados, os desenvolvedores devem realizar testes rigorosos antes de mudar para chaves efêmeras.
Criação programática de solicitações de assinatura de certificação PKCS#10 e certificados de chave pública X.509
A partir do .NET Framework 4.7.2, as cargas de trabalho podem gerar pedidos de assinatura de certificados (CSRs), o que permite que a geração de pedidos de certificados seja integrada em ferramentas existentes. Isso é frequentemente útil em cenários de teste.
Para mais informações e exemplos de código, consulte "Criação programática de pedidos de assinatura de certificação PKCS#10 e certificados de chave pública X.509" no blogue .NET.
Novos membros SignerInfo
A partir do .NET Framework 4.7.2, a classe SignerInfo expõe mais informações sobre a assinatura. Você pode recuperar o valor da propriedade System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm 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.
Deixar um fluxo encapsulado aberto depois que o CryptoStream é descartado
A partir do .NET Framework 4.7.2, a classe CryptoStream tem um construtor adicional que permite ao Dispose não fechar o fluxo encapsulado. Para deixar o fluxo encapsulado aberto depois que a instância de CryptoStream for descartada, chame o novo construtor CryptoStream da seguinte maneira:
var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)
Alterações de descompressão no DeflateStream
A partir do .NET Framework 4.7.2, a implementação das operações de descompressão na classe DeflateStream passou a usar APIs Windows nativas por defeito. Normalmente, isso resulta em uma melhoria substancial de desempenho.
O suporte para descompressão através do uso de APIs do Windows está ativado por defeito para aplicações que têm como alvo o .NET Framework 4.7.2. Aplicações que se destinam a versões anteriores do .NET Framework, mas que estão a executar-se sob .NET Framework 4.7.2, podem optar por este comportamento adicionando o seguinte AppContext switch ao ficheiro de configuração da aplicação:
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />
APIs de coleção adicionais
.NET Framework 4.7.2 adiciona várias novas APIs aos tipos SortedSet<T> e HashSet<T>. Estes incluem:
Os métodos
TryGetValue, que estendem o padrão try usado em outros tipos de coleções para estes dois tipos. Os métodos são:Enumerable.To*métodos de extensão, que convertem uma coleção em um HashSet<T>:Novos construtores de HashSet<T> que permitem definir a capacidade da coleção, o que gera um benefício de desempenho quando você sabe o tamanho do HashSet<T> com antecedência:
A classe ConcurrentDictionary<TKey,TValue> inclui novas sobrecargas do AddOrUpdate e GetOrAdd métodos para recuperar um valor do dicionário ou adicioná-lo se ele não for encontrado, e para 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 em Web Forms
Injeção de dependência (DI) desacopla 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 aplicações ASP.NET que visam o .NET Framework 4.7.2, pode:
Use injeção baseada em setter, interface e em construtor em handlers e módulos, instâncias de Página e controlos de utilizador de projetos de aplicação web ASP.NET.
Utilizar injeção baseada em setters e interfaces em manipuladores e módulos
, das instâncias de Página e controlos deutilizador de projetos de sites web ASP.NET.Conecte diferentes estruturas de injeção de dependência.
Suporte para cookies do mesmo site
SameSite impede que um navegador envie um cookie junto com uma solicitação entre sites. .NET Framework 4.7.2 adiciona uma propriedade HttpCookie.SameSite cujo valor é um membro de enumeração System.Web.SameSiteMode. Se o seu valor for SameSiteMode.Strict ou SameSiteMode.Lax, ASP.NET adiciona o atributo SameSite ao cabeçalho set-cookie. O suporte do SameSite aplica-se aos HttpCookie objetos, bem como aos FormsAuthentication e System.Web.SessionState cookies.
Você pode definir SameSite para um objeto HttpCookie 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 do SameSite no nível do aplicativo modificando o arquivo web.config:
<system.web>
<httpCookies sameSite="Strict" />
</system.web>
Você pode adicionar 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
A implementação de propriedades do HttpClientHandler
.NET Framework 4.7.1 adicionou oito propriedades à classe System.Net.Http.HttpClientHandler. No entanto, dois lançaram um PlatformNotSupportedException. O .NET Framework 4.7.2 fornece agora uma implementação para estas propriedades. Os imóveis são:
SQLClient
Suporte para Autenticação Universal Azure Active Directory e Autenticação Multifator
As crescentes exigências de conformidade e segurança exigem que muitos clientes usem a autenticação multifator (MFA). Além disso, as práticas recomendadas atuais desencorajam a inclusão de senhas de usuário diretamente nas cadeias de conexão. Para suportar estas alterações, .NET Framework 4.7.2 estende as cadeias de ligação SQLClient adicionando um novo valor, "Active Directory Interactive", para a palavra-chave existente "Authentication" para suportar MFA e Azure AD Authentication. O novo método interativo suporta utilizadores nativos e federados do Azure AD, bem como utilizadores convidados do Azure AD. Quando este método é utilizado, a autenticação MFA imposta pelo Azure AD é suportada para bases 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.
Em versões anteriores do .NET Framework, a conectividade SQL suportava apenas as opções SqlAuthenticationMethod.ActiveDirectoryPassword e SqlAuthenticationMethod.ActiveDirectoryIntegrated. Ambos fazem parte do protocolo não interativo ADAL, que não suporta MFA. Com a nova opção SqlAuthenticationMethod.ActiveDirectoryInteractive, a conectividade SQL suporta MFA bem como métodos de autenticação existentes (palavra-passe e autenticação integrada), permitindo aos utilizadores introduzir palavras-passe de utilizador de forma interativa sem persistir palavras-passe no connection string.
Para mais informações e um exemplo, consulte "SQL -- Azure AD Universal and Multifactor Authentication Support" no blogue .NET.
Suporte para Always Encrypted versão 2
NET Framework 4.7.2 adiciona suporte para 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 encriptação 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 alterar. Para suportar o Always Encrypted baseado em enclave, .NET Framework 4.7.2 adiciona os seguintes tipos e membros ao espaço de nomes System.Data.SqlClient:
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 atestação usados por SQL Server para obter a informação necessária para executar um determinado Protocolo de Atestado.
O arquivo de configuração do aplicativo especifica uma implementação concreta da classe System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider abstrata 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 utilizador cria uma ligação AlwaysEncrypted ao SQL Server que suportava o Always Encrypted baseado em enclave. O controlador entra em contato com o serviço de atestação para garantir que está a conectar-se ao enclave certo.
Uma vez que o enclave foi atestado, o driver estabelece um canal seguro com o enclave hospedado de forma segura no SQL Server.
O driver compartilha chaves de criptografia autorizadas pelo cliente com o enclave seguro durante a duração da conexão SQL.
Windows Presentation Foundation
Localizando Dicionários de Recursos por Fonte
A partir do .NET Framework 4.7.2, um assistente de diagnóstico pode localizar os ResourceDictionaries que foram criados a partir de um determinado Uri de origem. (Esta funcionalidade destina-se a assistentes de diagnóstico, não a aplicações de produção.) Um assistente de diagnóstico, como a funcionalidade "Edit-and-Continue" do Visual Studio, permite ao utilizador editar um ResourceDictionary com a intenção de que as alterações sejam aplicadas à aplicação em curso. 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 em 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 código a seguir:
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 ambiente ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO esteja definida.
Encontrar proprietários do ResourceDictionary
A partir do .NET Framework 4.7.2, um assistente de diagnóstico pode localizar os proprietários de um dado ResourceDictionary. (A funcionalidade destina-se a assistentes de diagnóstico e não a aplicações de produção.) Sempre que uma alteração é feita a um ResourceDictionary, WPF encontra automaticamente todas as referências DynamicResource que possam ser afetadas pela alteração.
Um assistente de diagnóstico, como a funcionalidade "Edit-and-Continue" da Visual Studio, pode querer estender isto para tratar referências StaticResource. O primeiro passo neste processo é encontrar os proprietários do dicionário; ou seja, encontrar todos os objetos cuja propriedade Resources se refere ao dicionário (direta ou indiretamente através da propriedade ResourceDictionary.MergedDictionaries). Três novos métodos estáticos implementados na classe System.Windows.Diagnostics.ResourceDictionaryDiagnostics, um para cada um dos tipos base que possui uma propriedade Resources, suportam este passo:
Esses métodos retornam um enumerável vazio, a menos que VisualDiagnostics esteja habilitado e a variável de ambiente ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO esteja definida.
Localizar referências a StaticResource
Agora, um assistente de diagnóstico pode receber uma notificação sempre que uma referência StaticResource for resolvida. (A funcionalidade destina-se a ser utilizada por assistentes de diagnóstico, não por aplicações de produção.) Um assistente de diagnóstico, como a funcionalidade "Edit-and-Continue" da Visual Studio, pode querer atualizar todas as utilizações de um recurso quando o seu valor num ResourceDictionary muda. WPF faz isto automaticamente para referências DynamicResource, mas intencionalmente não o faz para referências StaticResource. A partir do .NET Framework 4.7.2, o assistente de diagnóstico pode usar estas notificações para localizar essas utilizações do recurso estático.
A notificação é implementada pelo novo evento ResourceDictionaryDiagnostics.StaticResourceResolved:
public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)
Este evento é gerado sempre que o tempo de execução do sistema resolve uma referência de StaticResource. Os argumentos
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 acessador de add é ignorado), a menos que VisualDiagnostics esteja habilitado e a variável de ambiente ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO seja definida.
ClickOnce
Aplicações com HDPI para Windows Forms, Windows Presentation Foundation (WPF) e Visual Studio Tools for Office (VSTO) podem ser todas implementadas usando o ClickOnce. Se a seguinte entrada for encontrada no manifesto da aplicação, a implementação terá sucesso sob o .NET Framework 4.7.2:
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
Para a aplicação Windows Forms, a solução alternativa anterior de definir a consciência do DPI no ficheiro de configuração da aplicação em vez do manifesto da aplicação já não é necessária para que a implementação do ClickOnce tenha sucesso.
O que há de novo no .NET Framework 4.7.1
O .NET Framework 4.7.1 inclui novas funcionalidades nas seguintes áreas:
Além disso, um dos principais focos do .NET Framework 4.7.1 é a melhoria da acessibilidade, que permite a uma aplicação proporcionar uma experiência adequada aos utilizadores de Tecnologia Assistiva. Para informações sobre melhorias de acessibilidade no .NET Framework 4.7.1, consulte O que há de novo em acessibilidade no .NET Framework.
Classes de base
Suporte para .NET Standard 2.0
.NET Standard define um conjunto de APIs que devem estar disponíveis em cada .NET implementação que suporte essa versão do standard. .NET Framework 4.7.1 suporta totalmente .NET Standard 2.0 e adiciona cerca de 200 APIs que estão definidas em .NET Standard 2.0 e que estão ausentes .NET Framework 4.6.1, 4.6.2 e 4.7. (Note-se que estas versões do .NET Framework suportam o .NET Standard 2.0 apenas se ficheiros adicionais de suporte ao .NET Standard também forem implementados no sistema de destino.) Para mais informações, consulte "BCL - .NET Standard 2.0 Support" no artigo do blogue .NET Framework 4.7.1 Runtime and Compiler Features.
Suporte para construtores de configuração
Os construtores de configuração permitem aos programadores injetar e construir definições de configuração para aplicações dinamicamente em tempo de execução. Os construtores de configurações personalizadas podem ser usados para modificar dados existentes em uma seção de configuração ou para construir 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ção personalizado, derive o seu construtor da classe abstrata ConfigurationBuilder e substitua os seus ConfigurationBuilder.ProcessConfigurationSection e ConfigurationBuilder.ProcessRawXml. Você também define os seus construtores no seu ficheiro .config. Para mais informações, consulte a seção "Configuration Builders" no artigo do blog .NET Framework 4.7.1 ASP.NET and Configuration Features.
Deteção de funcionalidades em tempo de execução
A classe System.Runtime.CompilerServices.RuntimeFeature fornece um mecanismo para determinar se uma funcionalidade predefinida é suportada numa dada implementação de .NET em tempo de compilação ou de execução. Em tempo de compilação, um compilador pode verificar se existe um campo especificado para determinar se o recurso é suportado; em caso afirmativo, pode emitir código que tira partido dessa funcionalidade. Em tempo de execução, uma aplicação 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 suportados pelo tempo de execução.
Tipos de tupla de valores são serializáveis
A partir do .NET Framework 4.7.1, System.ValueTuple e os seus tipos genéricos associados são marcados como Serializável, 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 o artigo "Compiler -- ValueTuple é Serializável" no blogue .NET Framework 4.7.1 Runtime and Compiler Features.
Suporte para referências somente leitura
.NET Framework 4.7.1 adiciona o System.Runtime.CompilerServices.IsReadOnlyAttribute. Esse atributo é usado por compiladores de linguagem para marcar membros que têm tipos ou parâmetros de retorno ref somente leitura. Para mais informações, consulte "Compilador -- Suporte para ReadOnlyReferences" no artigo do blogue .NET Framework 4.7.1 Runtime and Compiler Features. Para informações sobre valores de retorno Ref, consulte Valores de retorno Ref e Ref locais e Valores de retorno Ref (Visual Basic).
Common Language Runtime (CLR)
Melhorias no desempenho da coleta de lixo
Alterações à recolha de lixo (GC) no .NET Framework 4.7.1 melhoram o desempenho global, especialmente para alocações de grandes pilhas de objetos (LOH). No .NET Framework 4.7.1, são usados bloqueios separados para alocações no heap de pequenos objetos (SOH) e no heap de grandes objetos (LOH), o que permite que alocações no LOH ocorram quando o GC de fundo está a varrer o SOH. Como resultado, as aplicações que fazem um grande número de alocações de LOH devem experimentar uma redução na contenção de bloqueio de alocação e um melhor desempenho. Para mais informações, consulte a secção "Runtime -- GC Performance Enhancements" no artigo do blogue .NET Framework 4.7.1 Runtime and Compiler Features.
Rede
Suporte ao SHA-2 para o Message.HashAlgorithm
No .NET Framework 4.7 e versões anteriores, a propriedade Message.HashAlgorithm suportava apenas valores de HashAlgorithm.Md5 e HashAlgorithm.Sha. A partir de .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384 e HashAlgorithm.Sha512 também são suportados. Se esse valor é realmente usado depende do MSMQ, uma vez que a instância Message em si não faz hash, mas simplesmente passa valores para o MSMQ. Para mais informações, consulte a secção "Suporte SHA-2 para Message.HashAlgorithm" no artigo do blog .NET Framework 4.7.1 ASP.NET e funcionalidades de configuração.
ASP.NET
Etapas de execução em aplicações ASP.NET
O ASP.NET processa pedidos num pipeline pré-definido que inclui 23 eventos. O ASP.NET executa cada gestor de eventos como uma etapa de execução. Nas versões do ASP.NET até ao .NET Framework 4.7, o ASP.NET não consegue propagar os contextos de execução devido à troca entre threads nativos e geridos. Em vez disso, o ASP.NET transmite seletivamente apenas o HttpContext. A partir do .NET Framework 4.7.1, o método HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) também permite que módulos restaurem dados ambientais. Esse recurso é direcionado a bibliotecas relacionadas a rastreamento, criação de perfis, diagnósticos ou transações, por exemplo, que se preocupam com o fluxo de execução do aplicativo. Para mais informações, consulte a "Funcionalidade de Etapa de Execução do ASP.NET" na postagem do blog .NET Framework 4.7.1 ASP.NET e Funcionalidades de Configuração.
Análise sintática de HttpCookie em ASP.NET
.NET Framework 4.7.1 inclui um novo método, HttpCookie.TryParse, que fornece uma forma padronizada de criar um objeto HttpCookie a partir de uma string e atribuir com precisão valores de cookies, como data de expiração e caminho. Para mais informações, consulte "ASP.NET HttpCookie parsing" no artigo do blog .NET Framework 4.7.1 ASP.NET and Configuration Features.
Opções de hash SHA-2 para credenciais de autenticação de formulários ASP.NET
No .NET Framework 4.7 e versões anteriores, o ASP.NET permitia aos programadores armazenar credenciais de utilizador com palavras-passe hashadas em ficheiros de configuração usando MD5 ou SHA1. A partir do .NET Framework 4.7.1, o ASP.NET também suporta novas opções seguras de hash SHA-2, como SHA256, SHA384 e SHA512. SHA1 permanece 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 que você use o fluxo de autenticação mais seguro disponível. Se estiveres a ligar-te a Azure SQL, Managed Identities for Azure resources é o método de autenticação recomendado.
O que há de novo no .NET Framework 4.7
O .NET Framework 4.7 inclui novas funcionalidades nas seguintes áreas:
- Classes de base
- Networking
- ASP.NET
- Windows Communication Foundation (WCF)
- Windows Forms
- Windows Presentation Foundation (WPF)
Para uma lista de novas APIs adicionadas à .NET Framework 4.7, veja .NET Framework 4.7 API Changes sobre GitHub. Para uma lista de melhorias de funcionalidades e correções de bugs no .NET Framework 4.7, consulte .NET Framework 4.7 Lista de Alterações sobre GitHub. Para mais informações, consulte Anunciando .NET Framework 4.7 no blogue .NET.
Classes de base
.NET Framework 4.7 melhora a serialização pelo DataContractJsonSerializer:
Funcionalidade melhorada com Criptografia de Curva Elíptica (ECC)*
No .NET Framework 4.7, foram adicionados métodos ImportParameters(ECParameters) às classes ECDsa e ECDiffieHellman para permitir que um objeto representasse uma chave já estabelecida. Um método ExportParameters(Boolean) também foi adicionado para exportar a chave usando parâmetros de curva explícitos.
.NET Framework 4.7 também adiciona suporte para curvas adicionais (incluindo o conjunto de curvas Brainpool) e adicionou definições pré-definidas para facilidade de criação através dos novos métodos de fábrica Create e Create.
Pode ver um exemplo melhorias na criptografia do .NET Framework 4.7 no GitHub.
Melhor suporte para caracteres de controle pelo DataContractJsonSerializer
No .NET Framework 4.7, a classe DataContractJsonSerializer serializa caracteres de controlo em conformidade com o padrão ECMAScript 6. Este comportamento está ativado por defeito para aplicações que visam o .NET Framework 4.7, e é uma funcionalidade opt-in para aplicações que estão a correr sob o .NET Framework 4.7 mas que visam uma versão anterior do .NET Framework. Para obter mais informações, consulte a seção compatibilidade de aplicações.
Rede
O .NET Framework 4.7 adiciona a seguinte funcionalidade relacionada com a rede:
Suporte padrão do sistema operacional para protocolos TLS*
A pilha TLS, que é usada pelos componentes System.Net.Security.SslStream e por componentes de camadas superiores, como HTTP, FTP e SMTP, permite que os desenvolvedores usem os protocolos TLS padrão suportados pelo sistema operativo. Os desenvolvedores não precisam mais codificar uma versão TLS.
ASP.NET
No .NET Framework 4.7, o ASP.NET inclui as seguintes novas funcionalidades:
Extensibilidade de Cache de Objetos
A partir do .NET Framework 4.7, o ASP.NET adiciona um novo conjunto de APIs que permitem aos programadores substituir as implementações padrão do ASP.NET para cache de objetos em memória e monitorização de memória. Os programadores podem agora substituir qualquer um dos seguintes três componentes se a implementação do ASP.NET não for adequada:
Armazenamento em cache de objetos. Ao utilizar a secção de configuração dos novos fornecedores de cache, os programadores podem inserir novas implementações de um cache de objetos para uma aplicação ASP.NET usando a nova interface
ICacheStoreProvider.Monitoramento de memória. O monitor de memória predefinido no ASP.NET notifica as aplicações quando estas estão a correr perto do limite de bytes privados configurados para o processo, ou quando a máquina está com pouca RAM física total disponível. Quando esses limites estão próximos, as notificações são enviadas. Para alguns aplicativos, as notificações são disparadas 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 propriedade ApplicationMonitors.MemoryMonitor.
Reações de limite de memória. Por defeito, o ASP.NET tenta reduzir a cache de objetos e chamar GC.Collect periodicamente quando o limite de bytes privados do processo esteja próximo. Para alguns aplicativos, a frequência de chamadas para GC.Collect ou a quantidade de cache cortada são ineficientes. Os programadores podem agora substituir ou complementar o comportamento padrão subscrevendo
IObserverimplementações ao monitor de memória da aplicação.
Windows Communication Foundation (WCF)
O Windows Communication Foundation (WCF) adiciona as seguintes funcionalidades e alterações:
Capacidade de configurar 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 TLS 1.2, além do SSL 3.0 e TLS 1.0 como protocolo padrão de segurança de mensagens. Esta é 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 melhorada de aplicativos e serialização WCF
O WCF inclui uma série de 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. Estes incluem:
- Melhor suporte para misturar código assíncrono e síncrono em chamadas para SocketConnection.BeginRead e SocketConnection.Read.
- Fiabilidade melhorada ao abortar uma conexão com
SharedConnectionListenerDuplexChannelBinder. - Maior confiabilidade das operações de serialização ao chamar o método FormatterServices.GetSerializableMembers(Type).
- Maior confiabilidade ao remover um garçom chamando o ChannelSynchronizer.RemoveWaiter método.
Windows Forms
No .NET Framework 4.7, o Windows Forms melhora o suporte para monitores de alto DPI.
Suporte de alto DPI
Começando com aplicações direcionadas ao .NET Framework 4.7, o .NET Framework apresenta suporte a DPI elevado e DPI dinâmico para aplicações Windows Forms. O suporte a DPI alto melhora o layout e a aparência de formulários e controles em monitores de alto DPI. O DPI dinâmico altera o layout e a aparência de formulários e controles quando o usuário altera o DPI ou o fator de escala de exibição de um aplicativo em execução.
O suporte a DPI elevado é uma funcionalidade opt-in que se configura definindo uma secção <System.Windows.Forms.ConfigurationSection> no ficheiro de configuração da sua aplicação. Para mais informações sobre como adicionar suporte de DPI elevado e DPI dinâmico à sua aplicação de Windows Forms, consulte Suporte DPI Alto em Windows Forms.
Windows Presentation Foundation (WPF)
No .NET Framework 4.7, o WPF inclui as seguintes melhorias:
Suporte para uma pilha de toques/stylus baseada em mensagens Windows WM_POINTER
Agora tem a opção de utilizar uma pilha de toque/stylus baseada em mensagens WM_POINTER em vez da Plataforma de Serviços Windows Ink (WISP). Esta é uma funcionalidade opt-in no .NET Framework. Para obter mais informações, consulte a seção compatibilidade de aplicações.
Nova implementação para WPF APIs de impressão
As APIs de impressão da WPF na classe System.Printing.PrintQueue chamam Windows Print Document Package API em vez da obsoleta XPS Print API. Para obter o impacto dessa alteração na compatibilidade de aplicativos, consulte a seção de compatibilidade de aplicativos.
O que há de novo no .NET Framework 4.6.2
O .NET Framework 4.6.2 inclui novas funcionalidades nas seguintes áreas:
Para uma lista de novas APIs adicionadas ao .NET Framework 4.6.2, veja .NET Framework 4.6.2 API Changes sobre GitHub. Para uma lista de melhorias de funcionalidades e correções de bugs no .NET Framework 4.6.2, veja .NET Framework 4.6.2 Lista de Alterações sobre GitHub. Para mais informações, consulte Anunciando .NET Framework 4.6.2 no blogue .NET.
ASP.NET
No .NET Framework 4.6.2, o ASP.NET inclui as seguintes melhorias:
Suporte melhorado 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 ValidationAttribute.ErrorMessage do atributo define o texto da mensagem de erro se a validação falhar. A partir do .NET Framework 4.6.2, o 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 a forma
DataAnnotation.Localization.{nome}.resx, onde nome é um nome de cultura no formato languageCode-país/regiãoCode ou languageCode.O nome da chave do recurso é a cadeia de caracteres atribuída ao atributo ValidationAttribute.ErrorMessage e seu valor é a mensagem de erro localizada.
Por exemplo, o seguinte atributo de anotação de dados 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 da mensagem de erro e cujo valor é a mensagem de erro localizada. O arquivo deve ser encontrado na pasta App.LocalResources. Por exemplo, a seguir está a chave e o seu valor em uma mensagem de erro localizada em francês (fr):
| Nome | Valor |
|---|---|
| A classificação deve estar entre 1 e 10. | La note deve ser composta entre 1 e 10. |
Além disso, a localização da anotação de dados é extensível. Os desenvolvedores podem integrar os seus próprios fornecedores de localizadores de strings, implementando a interface IStringLocalizerProvider para armazenar strings de localização num local diferente de um ficheiro de recursos.
Suporte assíncrono com provedores de armazenamento de estado de sessão
O ASP.NET permite agora que métodos de retorno de tarefas sejam usados com fornecedores de armazenamento de estado de sessão, permitindo assim que as aplicações ASP.NET obtenham os benefícios de escalabilidade do assíncrono. Para suportar operações assíncronas com fornecedores de armazenamento de estado de sessão, ASP.NET inclui uma nova interface, System.Web.SessionState.ISessionStateModule, que herda do IHttpModule e permite aos programadores implementar os seus próprios fornecedores de módulo de estado de sessão e de armazenamento de sessões assíncronos. A interface é definida da seguinte forma:
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 classe SessionStateUtility 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, métodos de retorno de tarefas podem ser usados com fornecedores de cache de saída para proporcionar os benefícios de escalabilidade do assíncrono. Os fornecedores que implementam estes métodos reduzem o bloqueio de threads num servidor web e melhoram a escalabilidade de um serviço ASP.NET.
As seguintes APIs foram adicionadas para oferecer suporte a provedores assíncronos de cache de saída:
A classe System.Web.Caching.OutputCacheProviderAsync, que herda de System.Web.Caching.OutputCacheProvider e permite que os desenvolvedores implementem um provedor de cache de saída assíncrono.
A classe OutputCacheUtility, que fornece métodos auxiliares para configurar o cache de saída.
18 novos métodos na classe System.Web.HttpCachePolicy. Estes incluem GetCacheability, GetCacheExtensions, GetETag, GetETagFromFileDependencies, GetMaxAge, GetMaxAge, GetNoStore, GetNoTransforms, GetOmitVaryStar, GetProxyMaxAge, GetRevalidation, GetUtcLastModified, GetVaryByCustom, HasSlidingExpiratione IsValidUntilExpires.
2 novos métodos na classe System.Web.HttpCacheVaryByContentEncodings: GetContentEncodings e SetContentEncodings.
2 novos métodos na classe System.Web.HttpCacheVaryByHeaders: GetHeaders e SetHeaders.
2 novos métodos na classe System.Web.HttpCacheVaryByParams: GetParams e SetParams.
Na classe System.Web.Caching.AggregateCacheDependency, o método GetFileDependencies.
No CacheDependency, o método GetFileDependencies.
Categorias de personagens
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 eram classificados com base nas categorias de caracteres Unicode 6.3.
O suporte para Unicode 8.0 é limitado à classificação de caracteres pela classe CharUnicodeInfo e aos tipos e métodos que dependem dele. Estas incluem a classe StringInfo, o método sobrecarregado Char.GetUnicodeCategory e as classes caracteres reconhecidas pelo motor de expressões regulares do .NET Framework. A comparação e ordenação de caracteres e strings não é afetada por esta alteração e continua a depender do sistema operativo subjacente ou, nos sistemas Windows 7, dos dados de caracteres fornecidos pelo .NET Framework.
Para alterações nas categorias de caracteres de Unicode 6.0 para Unicode 7.0, consulte The Unicode Standard, Version 7.0.0 no site do Unicode Consortium. Para ver as alterações do Unicode 7.0 para o Unicode 8.0, consulte O Padrão Unicode, Versão 8.0.0 no site do Consórcio Unicode.
Criptografia
Suporte para certificados X509 contendo 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 FIPS 186-2 de 1024 bits.
Para além de suportar os tamanhos maiores de chave do FIPS 186-3, o .NET Framework 4.6.2 permite calcular assinaturas com a família SHA-2 de algoritmos de hash (SHA256, SHA384 e SHA512). O suporte a FIPS 186-3 é fornecido pela nova classe System.Security.Cryptography.DSACng.
Em consonância com as alterações recentes à classe RSA no .NET Framework 4.6 e à classe ECDsa no .NET Framework 4.6.1, a classe base abstrata DSA no .NET Framework 4.6.2 tem métodos adicionais que permitem aos chamadores usar esta funcionalidade sem casting. Você pode chamar o método de extensão DSACertificateExtensions.GetDSAPrivateKey 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 método de extensão DSACertificateExtensions.GetDSAPublicKey para verificar 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 chaves ECDiffieHellman
.NET Framework 3.5 adicionou suporte para o Acordo de Chaves Diffie-Hellman de Curva Elíptica com três rotinas diferentes de função de derivação de chave (KDF). As entradas para as rotinas, e as próprias rotinas, foram configuradas através de propriedades no objeto ECDiffieHellmanCng. Mas como nem todas as rotinas leem todas as propriedades de entrada, havia amplo espaço para confusão sobre o passado do desenvolvedor.
Para resolver isto no .NET Framework 4.6.2, os seguintes três métodos foram adicionados à classe base ECDiffieHellman para representar de forma mais clara estas rotinas KDF e as suas entradas:
| Método ECDiffieHellman | Descrição |
|---|---|
| DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) | Deriva o material chave usando a fórmula HASH(secretPrepend || x || secretAppend) HASH(secretPrepend OrElse x OrElse secretAppend) onde x é o resultado calculado do algoritmo EC Diffie-Hellman. |
| DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) | Deriva o material chave usando a fórmula HMAC(hmacKey, secretPrepend || x || secretAppend) HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend) onde x é o resultado calculado do algoritmo EC Diffie-Hellman. |
| DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) | Deriva material chave usando o algoritmo de derivação de função pseudoaleatória (PRF) 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 por hardware, e o .NET Framework 4.6.2 tornou possível aos programadores tirar partido desta funcionalidade. Como a noção de nomes-chave e provedores-chave é específica da 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 preferida (como chamar Aes.Create).
Existe suporte para encriptação 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 de SignedXml para hashing SHA-2
.NET Framework 4.6.2 adiciona suporte à classe SignedXml para métodos de assinatura RSA-SHA256, RSA-SHA384 e RSA-SHA512 PKCS#1, bem como para os 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 de SignatureDescription personalizado no CryptoConfig para adicionar suporte a esses algoritmos continuarão a funcionar como no passado, mas como agora há padrões de plataforma, o registro CryptoConfig não é mais necessário.
SqlClient
.NET Framework Data Provider for SQL Server (System.Data.SqlClient) inclui as seguintes novas funcionalidades no .NET Framework 4.6.2:
Pooling de ligações e timeouts com bases de dados Azure SQL
Quando o pool de conexões é habilitado e ocorre um tempo limite ou outro erro de login, uma exceção é armazenada em cache e a exceção armazenada em cache é lançada em qualquer tentativa de conexão subsequente pelos próximos 5 segundos a 1 minuto. Para mais informações, consulte SQL Server Pool de Ligação (ADO.NET).
Este comportamento não é desejável ao ligar a bases de dados Azure SQL, uma vez que as tentativas de ligação podem falhar com erros transitórios que normalmente são recuperados rapidamente. Para otimizar melhor a experiência de retentativa de ligação, o comportamento do período de bloqueio do pool de ligações é removido quando as ligações às bases de dados Azure SQL falham.
A adição da nova palavra-chave PoolBlockingPeriod permite selecionar o período de bloqueio mais adequado para o seu aplicativo. Os valores incluem:
O período de bloqueio do pool de ligação para uma aplicação que se liga a uma Azure SQL Database está desativado, e o período de bloqueio do pool de ligação para uma aplicação que se liga a qualquer outra instância do SQL Server está ativado. Este é o valor padrão. Se o nome do endpoint do servidor terminar com qualquer um dos seguintes, são considerados Bases de Dados Azure SQL:
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
O período de bloqueio do pool de conexões está sempre ativado.
O período de bloqueio do pool de conexões é sempre desativado.
Aprimoramentos para Always Encrypted
SQLClient introduz dois aprimoramentos para 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 propriedade SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled 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 propriedade SqlConnection.ColumnEncryptionKeyCacheTtl.
Windows Communication Foundation
No .NET Framework 4.6.2, o Windows Communication Foundation foi melhorado nas seguintes áreas:
Suporte à segurança de transporte WCF para certificados armazenados usando CNG
A segurança do transporte WCF suporta certificados armazenados usando a biblioteca de criptografia do Windows (CNG). No .NET Framework 4.6.2, este suporte limita-se ao uso de certificados com chave pública cujo expoente não ultrapassa 32 bits de comprimento. Quando uma aplicação visa o .NET Framework 4.6.2, esta funcionalidade está ativada por defeito.
Para aplicações que visam o .NET Framework 4.6.1 e anteriores, mas que estão a correr no .NET Framework 4.6.2, esta funcionalidade pode ser ativada adicionando a linha seguinte à secção <runtime> do ficheiro 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 definição de configuração do aplicativo para determinar se a classe DataContractJsonSerializer oferece suporte a várias regras de ajuste para um único fuso horário. Este é um recurso de adesão. Para habilitá-lo, adicione a seguinte configuração ao seu arquivo app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>
Quando esse recurso está habilitado, um objeto DataContractJsonSerializer usa o tipo TimeZoneInfo em vez do tipo TimeZone para desserializar dados de data e hora. TimeZoneInfo suporta várias regras de ajuste, o que torna possível trabalhar com dados históricos de fuso horário; TimeZone não.
Para obter mais informações sobre a estrutura do TimeZoneInfo e os ajustes de fuso horário, consulte Visão geral do fuso horário .
Compatibilidade ideal para NetNamedPipeBinding
O WCF tem uma nova definição de aplicação que pode ser configurada em aplicativos cliente para garantir que eles estejam sempre conectados ao serviço a ouvir no URI que melhor corresponde ao solicitado. Com essa configuração de aplicativo definida como false (o padrão), é possível que os clientes que usam NetNamedPipeBinding tentem se conectar a um serviço escutando em um URI que é uma substring do URI solicitado.
Por exemplo, um cliente tenta conectar-se a um serviço que escuta em net.pipe://localhost/Service1, mas um serviço diferente nessa máquina que está a correr com privilégios de administrador está a escutar em net.pipe://localhost. Com essa configuração de aplicativo definida como false, o cliente tentaria se conectar ao serviço errado. Depois de definir a configuração da aplicação como true, o cliente conectará sempre ao serviço mais adequado.
Observação
Os clientes que usam NetNamedPipeBinding encontram serviços com base no endereço base do serviço (se ele existir) em vez do endereço completo do endpoint. 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>
SSL 3.0 não é um protocolo padrão
Ao usar 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, porque o TLS 1.0 está incluído na lista de protocolos para NetTcp. Todos os clientes existentes devem ser capazes de negociar uma conexão usando pelo menos TLS 1.0. Se Ssl3 for necessário, use um dos seguintes mecanismos de configuração para adicioná-lo à lista de protocolos negociados.
A propriedade SslStreamSecurityBindingElement.SslProtocols
A propriedade TcpTransportSecurity.SslProtocols
A seção de transporte
da seção do netTcpBinding A seção <sslStreamSecurity> da seção <customBinding>
Windows Presentation Foundation (WPF)
No .NET Framework 4.6.2, o Windows Presentation Foundation foi melhorado nas seguintes áreas:
Classificação de grupo
Um aplicativo que usa um objeto CollectionView 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 grupos, as novas propriedades GroupDescription.SortDescriptions e GroupDescription.CustomSort descrevem como classificar a coleção de grupos produzidos pelo objeto GroupDescription. Isso é análogo à maneira como as propriedades ListCollectionView nomeadas de forma idêntica descrevem como classificar os itens de dados.
Duas novas propriedades estáticas da classe PropertyGroupDescription, CompareNameAscending e CompareNameDescending, podem ser usadas para os casos mais comuns.
Por exemplo, o XAML a seguir agrupa dados por idade, classifica as faixas etárias em ordem crescente e agrupa os itens dentro de cada faixa etária por sobrenome.
<GroupDescriptions>
<PropertyGroupDescription
PropertyName="Age"
CustomSort=
"{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
</PropertyGroupDescription>
</GroupDescriptions>
<SortDescriptions>
<SortDescription PropertyName="LastName"/>
</SortDescriptions>
Suporte de teclado tátil
O suporte ao teclado tátil permite o rastreamento de foco em aplicações WPF ao invocar e desativar automaticamente o teclado tátil no Windows 10 quando a entrada tátil é recebida por um controlo que pode receber entrada textual.
Em versões anteriores do .NET Framework, as aplicações WPF não podiam optar pelo rastreio de foco sem desativar o suporte a caneta/gestos de toque WPF. Como resultado, as aplicações WPF têm de escolher entre o suporte total ao WPF touch ou confiar na promoção do rato Windows.
DPI por monitor
Para suportar a recente proliferação de ambientes de alto DPI e híbrido DPI para aplicações WPF, o WPF no .NET Framework 4.6.2 permite suporte individual a monitores. Consulte os exemplos e o guia para programadores no GitHub para mais informações sobre como ativar a sua aplicação WPF para que fique consciente do DPI por monitor.
Em versões anteriores do .NET Framework, as aplicações WPF são conscientes do sistema DPI. Em outras palavras, a interface do usuário do aplicativo é dimensionada pelo sistema operacional conforme apropriado, dependendo do DPI do monitor no qual o aplicativo é renderizado.
Para aplicações executando em .NET Framework 4.6.2, pode desativar alterações de DPI por monitor em aplicações WPF adicionando uma instrução de configuração à secção <runtime> do ficheiro de configuração da sua aplicação, da seguinte forma:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>
Fundação do Fluxo de Trabalho do Windows (WF)
No .NET Framework 4.6.2, o Windows Workflow Foundation foi melhorado na seguinte área:
Suporte para expressões C# e IntelliSense no Rehosted WF Designer
A partir do .NET Framework 4.5, o WF suporta expressões C# tanto no Visual Studio Designer como em fluxos de trabalho de código. O Rehosted Workflow Designer é uma funcionalidade chave do WF que permite ao Workflow Designer estar numa aplicação fora do Visual Studio (por exemplo, no WPF). O Windows Workflow Foundation oferece a capacidade de suportar expressões C# e IntelliSense no Rehosted Workflow Designer. Para mais informações, consulte o blogue 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 IntelliSense do WF Designer está avariado quando um cliente reconstrói um projeto de workflow a partir de Visual Studio. Embora a compilação do projeto seja bem-sucedida, os tipos de fluxo de trabalho não são encontrados no designer, e avisos do IntelliSense sobre os tipos de fluxo de trabalho ausentes aparecem na janela Lista de Erros do
aplicativos Workflow V1 com o Workflow Tracking agora são executados no modo FIPS
As máquinas com o Modo de Conformidade FIPS ativado agora podem executar com êxito um aplicativo de fluxo de trabalho no estilo Versão 1 com o acompanhamento do 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 este cenário não estiver ativado, a execução da aplicação continua a gerar uma exceção com a mensagem: "Esta implementação não faz parte dos algoritmos criptográficos validados FIPS da Windows Platform."
Melhorias no Fluxo de Trabalho ao usar o Dynamic Update com Visual Studio Workflow Designer
O Designer de Fluxo de Trabalho, o Designer de Atividade de Fluxograma 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 método DynamicUpdateServices.PrepareForUpdate. Nas versões do .NET Framework anteriores .NET Framework 4.6.2, carregar um ficheiro XAML em Visual Studio para um fluxo de trabalho que foi guardado após chamar 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 oposição aos valores das propriedades anexadas.
ClickOnce
ClickOnce foi atualizado para suportar TLS 1.1 e TLS 1.2, além do protocolo 1.0, que já suporta. ClickOnce deteta automaticamente qual protocolo é necessário; nenhuma etapa extra dentro do aplicativo ClickOnce é necessária para habilitar o suporte a TLS 1.1 e 1.2.
Conversão de aplicações Windows Forms e WPF em aplicações UWP
O Windows agora oferece capacidades para trazer aplicações de ambiente de trabalho Windows existentes, incluindo aplicações WPF e Windows Forms, para a Universal Windows Platform (UWP). Esta tecnologia funciona como uma ponte, permitindo-lhe migrar gradualmente a sua base de código existente para UWP, levando assim a sua aplicação a todos os dispositivos com Windows 10.
Os aplicativos de área de trabalho convertidos ganham uma identidade de aplicativo semelhante à identidade de aplicativo de aplicativos UWP, o que torna as APIs UWP acessíveis para habilitar recursos como Live Tiles 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 de usuário adaptável. Quando toda a funcionalidade é transferida para o processo do contentor de aplicações, o processo de confiança total pode ser removido e a nova aplicação UWP pode ser disponibilizada a todos os dispositivos Windows 10.
Melhorias de depuração
A API de depuração não gerida foi melhorada no .NET Framework 4.6.2 para realizar análises adicionais quando um NullReferenceException é lançado, de modo a ser possível determinar qual variável numa única linha de código-fonte é null. Para dar suporte a esse cenário, as APIs a seguir foram adicionadas à API de depuração não gerenciada.
As interfaces ICorDebugCode4, ICorDebugVariableHomee ICorDebugVariableHomeEnum, que expõem as casas nativas de variáveis geridas. Isso permite que os depuradores façam alguma análise de fluxo de código quando ocorre uma NullReferenceException e trabalhem para trás para determinar a variável gerenciada que corresponde ao local nativo que foi
null.O método ICorDebugType2::GetTypeID fornece um mapeamento de ICorDebugType para COR_TYPEID, o que permite ao depurador obter um COR_TYPEID sem instância de ICorDebugType. As APIs existentes no COR_TYPEID podem ser usadas para determinar a disposição da classe do tipo.
O que há de novo no .NET Framework 4.6.1
O .NET Framework 4.6.1 inclui novas funcionalidades nas seguintes áreas:
Para mais informações sobre o .NET Framework 4.6.1, veja os seguintes tópicos:
Diferenças da API do .NET Framework (no GitHub)
Criptografia: Suporte para certificados X509 contendo ECDSA
O .NET Framework 4.6 adicionou suporte RSACng para certificados X509. O .NET Framework 4.6.1 adiciona suporte para certificados ECDSA (Algoritmo de Assinatura Digital de Curva Elíptica) X509.
O ECDSA oferece melhor desempenho e é um algoritmo de criptografia mais seguro do que o RSA, fornecendo uma excelente opção onde o desempenho e a escalabilidade do Transport Layer Security (TLS) são uma preocupação. A implementação do .NET Framework envolve chamadas em funcionalidades já existentes do Windows.
O seguinte código de exemplo mostra como é fácil gerar uma assinatura para um fluxo de bytes usando o novo suporte para certificados ECDSA X509 incluído 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
Isto 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
Os seguintes foram adicionados ao ADO.NET:
Suporte Always Encrypted para chaves protegidas por hardware
ADO.NET agora suporta o armazenamento de chaves mestras de coluna Always Encrypted de forma nativa em Módulos de Segurança de Hardware (HSMs). Com esse suporte, os clientes podem aproveitar chaves assimétricas armazenadas em HSMs sem precisar escrever provedores de armazenamento de chaves mestras de coluna personalizadas e registrá-los em aplicativos.
Os clientes precisam instalar o provedor CSP fornecido pelo fornecedor do HSM ou os provedores de armazenamento de chaves CNG nos servidores de aplicativos ou computadores clientes para acessar dados Always Encrypted protegidos com chaves mestras de coluna armazenadas em um HSM.
Comportamento de conexão de MultiSubnetFailover aprimorado para o AlwaysOn
SqlClient agora fornece automaticamente conexões mais rápidas para um Grupo de Disponibilidade AlwaysOn (AG). Ele deteta de forma transparente se seu aplicativo está se conectando a um grupo de disponibilidade (AG) AlwaysOn em uma sub-rede diferente, descobre rapidamente o servidor ativo atual e fornece uma conexão com o servidor. Antes desta versão, uma aplicação tinha de definir o connection string para incluir "MultisubnetFailover=true" para indicar que estava a ligar-se a um Grupo de Disponibilidade AlwaysOn. Sem definir a palavra-chave de conexão como true, um aplicativo pode enfrentar um timeout ao conectar-se a um grupo de disponibilidade AlwaysOn. Com esta versão, um aplicativo não precisa mais definir MultiSubnetFailover para true. Para obter mais informações sobre o suporte do SqlClient para Grupos de Disponibilidade Always On, consulte Suporte do SqlClient para Alta Disponibilidade, Recuperação de Desastres.
Windows Presentation Foundation (WPF)
O Windows Presentation Foundation inclui várias melhorias e alterações.
Melhor desempenho
O atraso na execução dos eventos de toque foi corrigido no .NET Framework 4.6.1. Além disso, digitar um controle de RichTextBox não amarra mais o thread de renderização durante a entrada rápida.
Melhorias na verificação ortográfica
O corretor ortográfico no WPF foi atualizado no Windows 8.1 e versões posteriores para aproveitar o suporte do sistema operativo para correção ortográfica de línguas adicionais. Não há alterações na funcionalidade nas versões do Windows anteriores ao Windows 8.1.
Tal como nas versões anteriores do .NET Framework, a linguagem para um controlo TextBox ou um bloco RichTextBox é detetada procurando informação pela seguinte ordem:
xml:lang, se estiver presente.Idioma de entrada atual.
Cultura atual.
Para mais informações sobre o suporte de linguagens em WPF, consulte o artigo do blogue WPF sobre as funcionalidades 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 que estão registados globalmente. Este recurso está disponível, além da capacidade de os registar por cada controlo.
Em versões anteriores do WPF, dicionários personalizados não reconheciam Palavras Excluídas nem listas de Autocorreção. São suportados em Windows 8.1 e Windows 10 através do uso de ficheiros que podem ser colocados no diretório %AppData%\Microsoft\Spelling\<language tag>. As seguintes regras aplicam-se a estes ficheiros:
Os arquivos devem ter extensões de .dic (para palavras adicionadas), .exc (para palavras excluídas) ou .acl (para AutoCorreção).
Os ficheiros devem ser texto simples UTF-16 LE que começa com a Marca de Ordem de Bytes (BOM).
Cada linha deve consistir em uma única palavra (nas listas de palavras adicionadas e excluídas), ou um par de correção automática com as palavras separadas por uma barra vertical (‘|’) (na lista de palavras de Correção Automática).
Esses arquivos são considerados somente leitura e não são modificados pelo sistema.
Observação
Estes novos formatos de ficheiro não são diretamente suportados pelas APIs de verificação ortográfica do WPF, e os dicionários personalizados fornecidos ao WPF nas aplicações devem continuar a usar ficheiros .lex.
Amostras
Existem vários exemplos de WPF no repositório Microsoft/WPF-Samples GitHub. Ajude-nos a melhorar as nossas amostras enviando-nos um pull-request ou abrindo um problema GitHub.
extensões DirectX
WPF inclui um pacote NuGet que fornece novas implementações de D3DImage facilitando a interoperabilidade com conteúdos DX10 e Dx11. O código deste pacote foi de código aberto e está disponível on GitHub.
Fundação do Fluxo de Trabalho do Windows: Transações
O método Transaction.EnlistPromotableSinglePhase agora pode usar um gerenciador de transações distribuído diferente do MSDTC para promover a transação. Para fazer isso, especifique um identificador de promotor de transação GUID nesta nova sobrecarga Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid). Se essa operação for bem-sucedida, há limitações colocadas nos recursos da transação. Uma vez alistado um coordenador de transação não-MSDTC, os seguintes métodos geram um TransactionPromotionException porque requerem promoção para MSDTC.
Uma vez que um promotor de transação não-MSDTC é inscrito, ele deve ser utilizado para alistamentos duráveis futuros utilizando protocolos que ele define. O Guid do promotor da transação pode ser obtido utilizando a propriedade PromoterType. Quando a transação é promovida, o promotor da transação fornece uma matriz Byte que representa o token promovido. Uma aplicação pode obter o token promovido para uma transação promovida que não seja MSDTC com o método GetPromotedToken.
Os utilizadores da nova sobrecarga Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) devem seguir uma sequência específica de chamadas para que a operação de promoção seja concluída com êxito. Essas regras estão documentadas na documentação do método.
de perfilagem
A API de criação de perfil não gerenciada foi aprimorada da seguinte maneira:
Melhor suporte para acessar PDBs no ICorProfilerInfo7 interface.
No ASP.NET Core, está a tornar-se muito mais comum que assemblys sejam compilados em memória pelo Roslyn. Para desenvolvedores que criam ferramentas de criação de perfil, isso significa que PDBs que historicamente eram serializados em disco podem não estar mais presentes. As ferramentas do Profiler geralmente usam PDBs para mapear o código de volta às linhas de origem para tarefas como cobertura de código ou análise de desempenho linha por linha. O ICorProfilerInfo7 interface agora inclui dois novos métodos, ICorProfilerInfo7::GetInMemorySymbolsLength e ICorProfilerInfo7::ReadInMemorySymbols, para fornecer a essas ferramentas de criação de perfil acesso aos dados 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, em seguida, processá-lo ou serializá-lo para o disco.
Melhor instrumentação com a interface ICorProfiler.
Os perfiladores que estão usando a funcionalidade ReJit das APIs
ICorProfilerpara 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 a IL se refere a metadados, isso limitou os tipos de instrumentação que poderiam ser feitos. Eliminamos 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 novos registros deAssemblyRef,TypeRef,TypeSpec,MemberRef,MemberSpeceUserString. Essa mudança possibilita uma gama muito mais ampla de instrumentação em tempo real.
PDBs do Gerador de Imagem Nativa (NGEN)
O rastreamento de eventos entre máquinas permite aos clientes perfilar um programa na Máquina A e analisar os dados de perfilagem com o mapeamento da linha de origem na Máquina B. Usando versões anteriores do .NET Framework, o utilizador copiava todos os módulos e imagens nativas da máquina perfilada para a máquina de análise que contém o PDB IL, criando o mapeamento fonte-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 desktop e exigem tempo significativo para copiar.
Com os PDBs do NGen, o NGen pode criar um PDB que inclui o mapeamento de IL para nativo sem uma dependência do PDB IL. Em nosso cenário de rastreamento de eventos entre máquinas, tudo o que é necessário é copiar o PDB de imagem nativo gerado pela Máquina A para a Máquina B e usar APIs de Acesso à Interface de Depuração, para ler o mapeamento deto-IL de origem do PDB de IL e o mapeamento de IL para nativo do PDB de imagem nativa. A combinação dos dois mapeamentos fornece um mapeamento de origem a nativo. Como o PDB de imagem nativo é muito menor do que todos os módulos e imagens nativas, o processo de cópia da Máquina A para a Máquina B é muito mais rápido.
Novidades no .NET 2015
O .NET 2015 introduz o .NET Framework 4.6 e o .NET Core. Algumas novas funcionalidades aplicam-se a ambos, e outras são específicas do .NET Framework 4.6 ou .NET Core.
ASP.NET Core
O .NET 2015 inclui o ASP.NET Core, que é uma implementação enxuta em .NET para construir aplicações modernas baseadas na cloud. O ASP.NET Core é modular, por isso podes incluir apenas as funcionalidades necessárias na tua aplicação. Pode ser alojado no IIS ou auto-hospedado num processo personalizado, e pode correr aplicações com diferentes versões do .NET Framework no mesmo servidor. Ele inclui um novo sistema de configuração de ambiente projetado para implantação em nuvem.
MVC, API da Web e páginas da Web são unificados em uma única estrutura chamada MVC 6. Constróis aplicações ASP.NET Core através de ferramentas no Visual Studio 2015 ou posteriores. As suas aplicações existentes funcionarão no novo .NET Framework; no entanto, para construir uma aplicação que utilize MVC 6 ou SignalR 3, deve usar o sistema de projeto no Visual Studio 2015 ou posterior.
Para informações, veja ASP.NET Core.
ASP.NET Atualizações
API baseada em tarefas para descarga assíncrona de resposta
ASP.NET agora fornece uma API simples baseada em tarefas para limpeza de respostas assíncronas, HttpResponse.FlushAsync, que permite limpar respostas de forma assíncrona usando o suporte
async/awaitda sua linguagem.Vinculação de Modelo suporta métodos que retornam tarefas
No .NET Framework 4.5, o ASP.NET adicionou a funcionalidade Model Binding que permitia uma abordagem extensível e focada no código para operações de dados baseadas em CRUDs em páginas Web Forms e controlos de utilizador. O sistema de vinculação de modelos agora suporta métodos de vinculação que retornam modelos com Task. Esse recurso permite que os desenvolvedores de Web Forms obtenham os benefícios de escalabilidade da programação assíncrona com a facilidade do sistema de ligação de dados ao usar versões mais recentes de ORMs, incluindo o Entity Framework.
A vinculação de modelo assíncrono é controlada pela configuração
aspnet:EnableAsyncModelBinding.<appSettings> <add key=" aspnet:EnableAsyncModelBinding" value="true|false" /> </appSettings>Nas aplicações que têm como alvo o .NET Framework 4.6, o valor por defeito é
true. Em aplicações a executar no .NET Framework 4.6 que têm como alvo uma versão anterior do .NET Framework, éfalsepor defeito. Ele pode ser habilitado definindo a configuração comotrue.Suporte 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 cliente e servidor), resultando em menor latência de carregamento de páginas da Web para os usuários. As páginas da Web (ao contrário dos serviços) são as que mais se beneficiam do HTTP/2, uma vez que o protocolo otimiza para vários artefatos solicitados como parte de uma única experiência. O suporte para HTTP/2 foi adicionado ao ASP.NET no .NET Framework 4.6. Como a funcionalidade de rede existe em múltiplas camadas, foram necessárias novas funcionalidades no Windows, no IIS e no ASP.NET para ativar o HTTP/2. Tens de estar a usar Windows 10 para usar HTTP/2 com ASP.NET.
HTTP/2 também é suportado e está ativado por defeito para aplicações Windows 10 Universal Windows Platform (UWP) que utilizam a API System.Net.Http.HttpClient.
Para fornecer uma forma de utilizar a funcionalidade PUSH_PROMISE em aplicações ASP.NET, foi adicionado um novo método com duas sobrecargas, PushPromise(String) e PushPromise(String, String, NameValueCollection), à classe HttpResponse.
Observação
Embora o ASP.NET Core suporte HTTP/2, o suporte para a funcionalidade 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 suportam HTTP/2, então é provável que seus usuários se beneficiem do suporte HTTP/2 se seu servidor o suportar.
Suporte para o protocolo de vinculação de token
A Microsoft e o Google têm colaborado em uma nova abordagem de autenticação, chamada de Token Binding Protocol. A premissa é que os tokens de autenticação (no cache do seu 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 mitigar este problema.
O Protocolo de Ligação de Token será implementado no Windows 10 como uma funcionalidade de navegador. As aplicações ASP.NET participarão no protocolo, para que os tokens de autenticação sejam validados para serem legítimos. As implementações do cliente e do servidor estabelecem a proteção de ponta a ponta especificada pelo protocolo.
Algoritmos de hash aleatórios para cadeias de caracteres
.NET Framework 4.5 introduziu um algoritmo de hash de cadeias aleatório. No entanto, não era suportado pelo ASP.NET devido a algumas funcionalidades do ASP.NET dependerem de um código hash estável. No .NET Framework 4.6, são agora suportados algoritmos de hash de strings aleatórios. Para habilitar este recurso, use a definição
aspnet:UseRandomizedStringHashAlgorithm.<appSettings> <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" /> </appSettings>
ADO.NET
O ADO .NET suporta agora a funcionalidade Always Encrypted disponível no SQL Server 2016. Com o Always Encrypted, o SQL Server pode realizar operações sobre dados encriptados e, acima de tudo, a chave de encriptação reside na aplicação dentro do ambiente de confiança 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 encriptação e desencriptação de dados acontece de forma transparente ao nível do controlador, minimizando as alterações que têm de ser feitas às aplicações existentes. Para mais detalhes, veja Always Encrypted (Database Engine) e Always Encrypted (desenvolvimento 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 com o nome de código 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á ativado para processos de 64 bits a correr sobre o .NET Framework 4.6. Seu aplicativo será executado em um processo de 64 bits se for compilado como 64 bits ou AnyCPU e estiver sendo executado 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, mudanças no comportamento são possíveis.
O novo compilador JIT de 64 bits também inclui recursos de aceleração SIMD de hardware quando acoplado a tipos habilitados para SIMD no namespace System.Numerics, o que pode gerar boas melhorias de desempenho.
Melhorias no carregador de montagem
O carregador de montagem agora usa a memória de forma mais eficiente, descarregando montagens IL depois que uma imagem NGEN correspondente é carregada. Esta alteração diminui a memória virtual, o que é particularmente benéfico para aplicações grandes de 32 bits (como o Visual Studio), e também poupa memória física.
Alterações na biblioteca de classes base
Muitas novas APIs foram adicionadas ao .NET Framework 4.6 para permitir cenários-chave. Estas incluem as seguintes alterações e adições:
IReadOnlyCollection<T> implementações
Coleções adicionais implementam IReadOnlyCollection<T>, tais como Queue<T> e Stack<T>.
CultureInfo.CurrentCulture e CultureInfo.CurrentUICulture
As propriedades CultureInfo.CurrentCulture e CultureInfo.CurrentUICulture agora são leitura-gravação em vez de somente leitura. Se você atribuir um novo objeto CultureInfo a essas propriedades, a cultura de thread atual definida pela propriedade
Thread.CurrentThread.CurrentCulturee a cultura de thread da interface do usuário atual definida pelas propriedadesThread.CurrentThread.CurrentUICulturetambém serão alteradas.Melhorias na coleta de lixo (GC)
A classe GC agora inclui métodos TryStartNoGCRegion e EndNoGCRegion que permitem não permitir a coleta de lixo durante a execução de um caminho crítico.
Uma nova sobrecarga do método GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) permite-lhe controlar se as pilhas de objetos pequenos e de objetos grandes são varridas e compactadas ou apenas varridas.
tipos habilitados para SIMD
O namespace System.Numerics agora inclui vários tipos habilitados para SIMD, como Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3e Vector4.
Como o novo compilador JIT de 64 bits também inclui recursos de aceleração 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 API System.Security.Cryptography está a ser atualizada para suportar as APIs de criptografia CNG Windows. As versões anteriores do .NET Framework basearam-se inteiramente numa versão anterior das APIs Windows Cryptograph como base para a implementação do System.Security.Cryptography. Tivemos pedidos para suportar a API CNG, uma vez que suporta modernos algoritmos de encriptação, que são importantes para certas categorias de aplicações.
O .NET Framework 4.6 inclui as seguintes novas melhorias para suportar as APIs de criptografia CNG do Windows:
Um conjunto de métodos de extensão para certificados X509,
System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)eSystem.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), que retornam uma implementação baseada em CNG em vez de uma implementação baseada em CAPI, quando possível. (Alguns cartões inteligentes, etc., ainda exigem CAPI, e as APIs lidam com o fallback).A classe System.Security.Cryptography.RSACng, que fornece uma implementação CNG do algoritmo RSA.
Aprimoramentos na API RSA para que ações comuns não exijam mais transmissão. Por exemplo, encriptar dados usando um objeto X509Certificate2 requer código como o seguinte nas 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 utiliza as novas APIs de criptografia no .NET Framework 4.6 pode ser reescrito da seguinte forma para evitar o cast.
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 conversão de datas e horas de ou para tempo Unix
Os seguintes novos métodos foram adicionados à estrutura DateTimeOffset para suportar a conversão de valores de data e hora de ou para a hora Unix:
Comutadores de compatibilidade
A classe AppContext adiciona um novo recurso de compatibilidade que permite que os escritores de bibliotecas forneçam um mecanismo de exclusão uniforme para novas funcionalidades para seus usuários. Estabelece um contrato de acoplamento flexível entre componentes, a fim de comunicar um pedido de autoexclusão. Esse recurso geralmente é importante quando uma alteração é feita na funcionalidade existente. Por outro lado, já existe um opt-in implícito para novas funcionalidades.
Com AppContext, as bibliotecas definem e expõem 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 switch (que é sempre um valor Boolean) que uma biblioteca dependente define. O interruptor está sempre implicitamente definido para
false. Definir o interruptor paratruepermite-o. Configurar explicitamente o interruptor parafalseproporciona 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 do interruptor e, em seguida, agir de forma adequada sobre ele.
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 switches, uma vez que são um contrato formal exposto por uma biblioteca. Seguem-se dois formatos óbvios.
Switch.namespace.switchname
Switch.biblioteca.nome do interruptor
Alterações no padrão assíncrono baseado em tarefas (TAP)
Para aplicações que visam .NET Framework 4.6, Task e Task<TResult> objetos herdam a cultura e a cultura da interface do thread que chama. O comportamento das aplicações que visam versões anteriores do .NET Framework, ou que não visam 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 CultureInfo classe.
A classe System.Threading.AsyncLocal<T> permite que você represente dados ambientais que são locais para um determinado fluxo de controle assíncrono, como um método
async. 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 de ambiente são alterados porque a propriedade AsyncLocal<T>.Value foi explicitamente alterada ou porque o thread encontrou uma transição de contexto.Três métodos de conveniência, Task.CompletedTask, Task.FromCancelede Task.FromException, foram adicionados ao padrão assíncrono baseado em tarefas (TAP) para retornar tarefas concluídas em um estado específico.
A classe NamedPipeClientStream agora oferece suporte à comunicação assíncrona com seu novo ConnectAsync. método.
EventSource agora oferece suporte à gravação no log de eventos
Agora você pode usar a classe EventSource para registrar mensagens administrativas ou operacionais no log de eventos, além de quaisquer sessões ETW existentes criadas na máquina. No passado, você tinha que usar o pacote NuGet Microsoft.Diagnostics.Tracing.EventSource para essa funcionalidade. Esta funcionalidade está agora integrada no .NET Framework 4.6.
Tanto o pacote NuGet como o .NET Framework 4.6 foram atualizados com as seguintes funcionalidades:
Eventos dinâmicos
Permite eventos definidos "on the fly" sem criar métodos de evento.
Cargas úteis avançadas
Permite que classes e matrizes especialmente atribuídas, bem como tipos primitivos, sejam passados como uma carga útil
Rastreamento de atividades
Faz com que os eventos Start e Stop marquem eventos entre eles com uma ID que representa todas as atividades ativas no momento.
Para suportar essas funcionalidades, o método sobrecarregado Write foi adicionado à classe EventSource.
Windows Presentation Foundation (WPF)
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 as ocorrências de recorte em controles com bordas. Por defeito, esta funcionalidade só está ativada se o seu TargetFrameworkAttribute estiver definido para .NET Framework 4.6. Aplicações que visam versões anteriores do framework mas que estejam a correr no Framework 4.6 .NET podem aderir ao novo comportamento adicionando a seguinte linha à secção <runtime> do ficheiro app.config:
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />Janelas WPF que abrangem vários monitores com diferentes definições de DPI (configuração Multi-DPI) estão agora completamente renderizadas sem regiões pretas. Você pode desativar esse comportamento adicionando a seguinte linha à seção
<appSettings>do arquivo app.config para desabilitar esse novo comportamento:<add key="EnableMultiMonitorDisplayClipping" value="true"/>Foi adicionado suporte para carregar automaticamente o cursor direito com base na definição de DPI ao System.Windows.Input.Cursor.
O Touch é melhor
Relatos de clientes no Connect sobre como o toque produz comportamentos imprevisíveis foram abordados no .NET Framework 4.6. O limiar de duplo toque para aplicações da Windows Store e aplicações WPF é agora o mesmo no Windows 8.1 e superiores.
Suporte para janela filha transparente
O WPF no .NET Framework 4.6 suporta janelas filhas transparentes no Windows 8.1 e versões posteriores. 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 propriedade HwndSourceParameters.UsesPerPixelTransparency como
true.
Windows Communication Foundation (WCF)
suporte SSL
O WCF agora suporta SSL versão TLS 1.1 e TLS 1.2, além de SSL 3.0 e TLS 1.0, ao usar NetTcp com segurança de transporte e autenticação de cliente. Agora é possível selecionar qual protocolo usar, ou desativar antigos protocolos menos seguros. Isso pode ser feito definindo a propriedade SslProtocols 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 diferentes conexões HTTP
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ões
Os usuários podem especificar uma cadeia de caracteres que o WCF usará como um prefixo para o nome do grupo de conexões. Duas mensagens com prefixos diferentes são enviadas usando conexões HTTP subjacentes diferentes. Você define o prefixo adicionando um par chave/valor à propriedade Message.Properties da 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 fábricas de canais diferentes usarão diferentes conexões HTTP subjacentes. Para habilitar esta funcionalidade, os utilizadores devem configurar o seguinte
appSettingparatrue:<appSettings> <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" /> </appSettings>
Windows Workflow Foundation (WWF)
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 marcador "não protocolar" pendente antes de atingir o tempo limite da solicitação. Um marcador "não protocolar" é um marcador que não está relacionado a atividades pendentes de Recebimento. Algumas atividades criam marcadores não protocolares em sua implementação, portanto, pode não ser óbvio que exista um marcador não protocolar. Estes incluem State e Pick. Portanto, se você tiver um serviço de fluxo de trabalho implementado com uma máquina de estado ou contendo uma atividade Pick, provavelmente terá marcadores não protocolares. Para especificar o intervalo, adicione uma linha como a seguinte à seção
appSettingsdo arquivo app.config:<add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>O valor padrão é 60 segundos. Se
valueestiver definido como 0, as solicitações fora de ordem serão imediatamente rejeitadas com uma falha no texto semelhante a esta: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.Esta é a mesma mensagem que você recebe se uma mensagem de operação fora de ordem for recebida e não houver marcadores não protocolares.
Se o valor do elemento
FilterResumeTimeoutInSecondsfor diferente de zero, houver marcadores não protocolares 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 uma exceção derivada de TransactionException a ser lançada. Para fazer isso, adicione a seguinte chave à seção
appSettingsdo arquivo app.config:<add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>O valor predefinido é
false.Networking
Reutilização de Socket
O Windows 10 inclui um novo algoritmo de rede de alta escalabilidade que faz melhor uso dos recursos da máquina ao reutilizar portas locais para ligações TCP de saída. O .NET Framework 4.6 suporta o novo algoritmo, permitindo que aplicações .NET tirem partido do novo comportamento. Em versões anteriores do Windows, existia um limite artificial de ligação concorrente (tipicamente 16.384, o tamanho padrão da gama dinâmica de portas), que podia limitar a escalabilidade de um serviço ao causar esgotamento das portas quando sob carga.
No .NET Framework 4.6, foram adicionadas duas APIs para permitir a reutilização de portas, o que elimina efetivamente o limite de 64 KB em ligações concorrentes:
O valor de enumeração System.Net.Sockets.SocketOptionName.
A propriedade ServicePointManager.ReusePort.
Por padrão, a propriedade ServicePointManager.ReusePort é
falsea menos que o valorHWRPortReuseOnSocketBindda chave do RegistroHKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319esteja definido como 0x1. Para habilitar a reutilização de porta local em conexões HTTP, defina a propriedade ServicePointManager.ReusePort comotrue. Isto faz com que todas as ligações de sockets TCP de saída de HttpClient e HttpWebRequest usem uma nova opção de socket Windows 10, SO_REUSE_UNICASTPORT, que permite a reutilização local de portas.Os desenvolvedores que escrevem 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 vinculação.
Suporte para nomes de domínio internacionais e PunyCode
Uma nova propriedade, IdnHost, foi adicionada à classe Uri para oferecer melhor suporte a nomes de domínio internacionais e PunyCode.
Redimensionamento de controlos no Windows Forms.
Esta funcionalidade foi expandida no .NET Framework 4.6 para incluir os tipos DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn e ToolStripSplitButton e o retângulo especificado pela propriedade Bounds usada ao desenhar um UITypeEditor.
Este é um recurso de adesão. Para habilitá-lo, defina o elemento
EnableWindowsFormsHighDpiAutoResizingcomotrueno arquivo de configuração do aplicativo (app.config):<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>Suporte para codificações de páginas de código
.NET Core suporta principalmente as codificações Unicode e, por defeito, fornece suporte limitado para codificações de páginas de códigos. Pode adicionar suporte para codificações de páginas de código disponíveis no .NET Framework mas não suportadas no .NET Core, registando codificações de páginas de códigos com o método Encoding.RegisterProvider. Para obter mais informações, veja System.Text.CodePagesEncodingProvider.
.NET Nativo
As aplicações da Universal Windows Platform (UWP) escritas em C# ou Visual Basic podem tirar partido de uma nova tecnologia que compila aplicações para código nativo em vez de IL. Esta tecnologia produz aplicações que têm tempos de arranque e execução mais rápidos. Para mais informações, consulte Compilar Apps com .NET Nativo. Para uma visão geral do .NET Native que analisa como difere tanto da compilação JIT como do NGEN e o que isso significa para o seu código, veja .NET Native e Compilation.
As suas aplicações são compiladas para código nativo por defeito quando as compila com o Visual Studio 2015 ou versões posteriores. Para mais informações, consulte Começar com .NET Nativo.
Para suportar a depuração de aplicações .NET Native, foram adicionadas novas interfaces e enumerações à API de depuração não gerida. Para obter mais informações, consulte Depuração (referência de API não gerenciada).
Pacotes Open-source .NET Framework
.NET Core, como as coleções imutáveis, as APIs SIMD e APIs de rede, tais como as encontradas no espaço de nomes System.Net.Http, estão agora disponíveis como pacotes de código aberto no GitHub. Para aceder ao código, veja .NET em GitHub. Para mais informações e como contribuir para estes pacotes, consulte Introdução ao .NET, .NET Página Inicial em GitHub.
O que há de novo no .NET Framework 4.5.2
Novas APIs para aplicações ASP.NET. Os novos métodos HttpResponse.AddOnSendingHeaders e HttpResponseBase.AddOnSendingHeaders permitem inspecionar e modificar cabeçalhos de resposta e código de status à medida que a resposta é liberada para o aplicativo cliente. Considere usar esses métodos em vez dos eventos PreSendRequestHeaders e PreSendRequestContent; são mais eficientes e fiáveis.
O método HostingEnvironment.QueueBackgroundWorkItem permite agendar pequenos itens de trabalho em segundo plano. O ASP.NET rastreia estes itens e impede que o IIS termine abruptamente o processo worker até que todos os itens de trabalho em segundo plano estejam concluídos. Este método não pode ser chamado fora de um domínio de aplicação gerido pelo ASP.NET.
As novas propriedades HttpResponse.HeadersWritten e HttpResponseBase.HeadersWritten retornam valores booleanos que indicam se os cabeçalhos de resposta foram gravados. Você pode usar essas propriedades para assegurar que as chamadas para APIs como HttpResponse.StatusCode (que geram exceções se os cabeçalhos tiverem sido gravados) sejam bem-sucedidas.
Redimensionamento nos controlos do Windows Forms. Este recurso foi expandido. Agora você pode usar a configuração DPI do sistema para redimensionar componentes dos seguintes controles adicionais (por exemplo, a seta suspensa em caixas de combinação):
Este é um recurso de adesão. Para habilitá-lo, defina o elemento
EnableWindowsFormsHighDpiAutoResizingcomotrueno 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 método EnlistPromotableSinglePhase (e, portanto, implementando a interface IPromotableSinglePhaseNotification) pode usar o novo método Transaction.PromoteAndEnlistDurable para solicitar o seguinte:
Promova a transação para o Microsoft Distributed Transaction Coordinator (MSDTC).
Substitua IPromotableSinglePhaseNotification por um ISinglePhaseNotification, que é um alistamento durável que suporta confirmações monofásicas.
Isso pode ser feito dentro do mesmo domínio do aplicativo e não requer nenhum código não gerenciado extra para interagir com o MSDTC para executar a promoção. O novo método pode ser chamado somente quando há uma chamada pendente de System.Transactions para o método IPromotableSinglePhaseNotification
Promoteimplementado pelo alistamento promocional.Melhorias na criação de perfis. As novas APIs de criação de perfil não gerenciadas a seguir fornecem uma criação de perfil mais robusta:
- COR_PRF_ASSEMBLY_REFERENCE_INFO Estrutura
- COR_PRF_HIGH_MONITOR Enumeração
- Método GetAssemblyReferences
- Método GetEventMask2
- Método SetEventMask2
- Método AddAssemblyReference
Implementações de
ICorProfileranteriores suportavam o carregamento lento de assemblies dependentes. As novas APIs de criação de perfil exigem que as assemblies dependentes injetadas pelo instrumentador sejam carregáveis imediatamente, em vez de serem carregadas após a aplicação estar totalmente inicializada. Essa alteração não afeta os usuários das APIs deICorProfilerexistentes.Melhorias na depuração. As seguintes novas APIs de depuração não geridas proporcionam uma melhor integração com um perfilador. Agora pode aceder aos metadados inseridos pelo perfilador, bem como às variáveis locais e ao código produzido por pedidos de ReJIT do compilador durante a análise de um dump.
Alterações no rastreamento de eventos. O .NET Framework 4.5.2 permite rastreamento de atividades fora de processo, baseado em Event Tracing for Windows (ETW), para uma área de superfície maior. Isso permite que os fornecedores de Gestão Avançada de Energia (APM) forneçam ferramentas leves que rastreiam com precisão os custos de solicitações individuais e atividades que se interligam entre threads. Esses eventos são gerados somente quando os controladores ETW os habilitam; portanto, as alterações não afetam o código ETW escrito anteriormente ou o código executado com o ETW desativado.
Promover uma transação e convertê-la em uma adesã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 um alistamento que foi previamente criado por Transaction.EnlistPromotableSinglePhase em resposta ao método ITransactionPromoter.Promote. Pede a
System.Transactionsque eleve a transação a uma transação MSDTC e que "converta" o alistamento promovível num alistamento duradouro. Depois que esse método for concluído com êxito, a interface IPromotableSinglePhaseNotification não será mais referenciada porSystem.Transactionse quaisquer notificações futuras chegarão na interface ISinglePhaseNotification fornecida. O alistamento em questão deve funcionar como um alistamento duradouro, suportando o registo e a recuperação de transações. Consulte Transaction.EnlistDurable para obter detalhes. Além disso, o alistamento deve apoiar ISinglePhaseNotification. Este método só pode ser chamado durante o processamento de uma chamada ITransactionPromoter.Promote. Se não for esse o caso, uma exceção TransactionException é lançada.
O que há de novo no .NET Framework 4.5.1
Atualizações de abril de 2014:
Visual Studio 2013 Atualização 2 inclui atualizações aos modelos da Portable Class Library para suportar estes cenários:
Pode usar APIs do Windows Runtime em bibliotecas portáteis que visam Windows 8.1, Windows Phone 8.1 e Windows Phone Silverlight 8.1.
Pode incluir XAML (tipos Windows.UI.XAML) em bibliotecas portáteis ao direcionar para Windows 8.1 ou Windows Phone 8.1. Os seguintes modelos XAML são suportados: Página em Branco, Dicionário de Recursos, Controle de Modelo e Controle de Usuário.
Pode criar um componente portátil do Windows Runtime (ficheiro .winmd) para usar em aplicações da Store que visam o Windows 8.1 e o Windows Phone 8.1.
Pode redirecionar uma biblioteca de classes da Windows Store ou da Windows Phone Store, como uma Portable Class Library.
Para obter mais informações sobre essas alterações, consulte Biblioteca de Classes Portátil.
O conjunto de conteúdos do .NET Framework inclui agora documentação para o .NET Native, que é uma tecnologia de pré-compilação para construir e implementar aplicações Windows. .NET Native compila as suas aplicações diretamente para código nativo, em vez de para linguagem intermédia (IL), para melhor desempenho. Para mais detalhes, consulte Compilar Apps com .NET Nativo.
A Fonte de Referência do Framework .NET oferece uma nova experiência de navegação e funcionalidades melhoradas. Agora pode navegar pelo código-fonte do .NET Framework online, descarregar a referência para visualização offline, e percorrer as fontes (incluindo patches e atualizações) durante a depuração. Para mais informações, consulte a entrada do blogue Uma nova abordagem para .NET Fonte de Referência.
Novas funcionalidades e melhorias nas classes base do .NET Framework 4.5.1 incluem:
Redirecionamento automático de vinculação para montagens. A partir do Visual Studio 2013, ao compilar uma aplicação que visa o .NET Framework 4.5.1, podem ser adicionados redirecionamentos de binding ao ficheiro de configuração da aplicação se a sua aplicação ou os seus componentes referenciarem múltiplas versões do mesmo assembly. Também pode ativar esta funcionalidade para projetos que visam versões mais antigas do .NET Framework. Para obter mais informações, consulte Como habilitar e desabilitar o redirecionamento automático de vinculaçã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 WriteEventWithRelatedActivityId e WriteEventWithRelatedActivityIdCore na classe EventSource.
Capacidade de compactar explicitamente a pilha de objetos grandes (LOH) durante a coleta de lixo. Para obter mais informações, consulte a propriedade GCSettings.LargeObjectHeapCompactionMode.
Melhorias adicionais de desempenho, como suspensão da aplicação ASP.NET, melhorias multi-core do JIT e arranque mais rápido da aplicação após uma atualização do .NET Framework. Para mais detalhes, consulte o anúncio .NET Framework 4.5.1 e o artigo no blog sobre a suspensão de aplicações ASP.NET.
Melhorias ao Windows Forms incluem:
Redimensionamento nos controlos do Windows Forms. Você pode usar a configuração DPI do sistema para redimensionar componentes de controlos (por exemplo, os ícones que aparecem numa grade de propriedades) optando por uma entrada no ficheiro de configuração da aplicação (app.config) para a sua aplicação. Esta funcionalidade é atualmente suportada nos seguintes controlos do Windows Forms:
- PropertyGrid
- TreeView
- Alguns aspetos do DataGridView (veja novos recursos em na versão 4.5.2 de para obter controle adicional suportado)
Para ativar esta funcionalidade, adicione um novo
<appSettings>elemento ao ficheiro de configuração (app.config) e defina oEnableWindowsFormsHighDpiAutoResizingelemento paratrue:<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
Melhorias ao depurar as suas aplicações .NET Framework no Visual Studio 2013 incluem:
Devolvam os valores no depurador do Visual Studio. Quando depura uma aplicação gerida no Visual Studio 2013, a janela Autos mostra tipos e valores de retorno para métodos. Esta informação está disponível para aplicações de desktop, Windows Store e Windows Phone. Para obter mais informações, consulte Examine os valores de retorno das chamadas de método.
Edite e continue para aplicativos de 64 bits. O Visual Studio 2013 suporta a funcionalidade Editar e Continuar para aplicações geridas de 64 bits para ambiente de trabalho, Windows Store e Windows Phone. As limitações existentes permanecem em vigor para aplicações de 32 bits e 64 bits (consulte a última seção do artigo Supported Code Changes (C#)).
Depuração com reconhecimento de assíncrono. Para facilitar a depuração de aplicações assíncronas no Visual Studio 2013, a pilha de chamadas esconde o código de infraestrutura fornecido pelos compiladores para suportar programação assíncrona, e também encadeia frames pais lógicos para que possa acompanhar a execução lógica do programa com mais clareza. Uma janela Tarefas substitui a janela Tarefas paralelas e exibe tarefas relacionadas a um ponto de interrupção específico, além de exibir quaisquer outras tarefas que estejam atualmente ativas ou agendadas no aplicativo. Pode ler sobre esta funcionalidade na secção "Depuração com suporte a Assíncrono" do anúncio do .NET Framework 4.5.1.
Melhor suporte a exceções para componentes do Windows Runtime. No Windows 8.1, exceções que surgem das aplicações da Windows Store preservam informação sobre o erro que causou a exceção, mesmo através das fronteiras da linguagem. Pode ler sobre esta funcionalidade na secção "Desenvolvimento de aplicações Windows Store" do anúncio .NET Framework 4.5.1.
A partir de Visual Studio 2013, pode usar a Ferramenta de Otimização Guiada por Perfis Geridos (Mpgo.exe) para otimizar as aplicações da Windows 8.x Store, bem como as aplicações de ambiente de trabalho.
Para novas funcionalidades no ASP.NET 4.5.1, consulte Notas de Lançamento do ASP.NET e Web Tools para o Visual Studio 2013.
Novidades no .NET Framework 4.5
Classes de base
Capacidade de reduzir reinícios do sistema ao detetar e fechar aplicações do .NET Framework 4 durante a implementação. Consulte Redução dos Reinícios do Sistema Durante as Instalações do .NET Framework 4.5.
Suporte para arrays maiores que 2 gigabytes (GB) em plataformas de 64 bits. Esse recurso pode ser habilitado no arquivo de configuração do aplicativo. Veja o
<gcAllowVeryLargeObjects>elemento, que também lista outras restrições sobre o tamanho do objeto e o tamanho do array.Melhor desempenho através da recolha de lixo em segundo plano para servidores. Quando utiliza a recolha de lixo do servidor no .NET Framework 4.5, a recolha de lixo em segundo plano é automaticamente ativada. Consulte a seção Coleta de lixo do servidor em segundo plano do tópico
Fundamentos da coleta de lixo. Compilação just-in-time (JIT) em segundo plano, que está disponível opcionalmente em processadores multi-core para melhorar o desempenho da aplicação. Consulte ProfileOptimization.
Capacidade de limitar por quanto tempo o mecanismo de expressão regular tentará resolver uma expressão regular antes que ela atinja o tempo limite. Ver a propriedade Regex.MatchTimeout.
Capacidade de definir a cultura padrão para um domínio de aplicativo. Veja a aula CultureInfo.
Suporte de console para codificação Unicode (UTF-16). Veja a aula Console.
Suporte para versionamento de ordenação de cadeia de caracteres culturais e dados de comparação. Veja a aula SortVersion.
Melhor desempenho na recuperação de recursos. Consulte Empacotar e implantar recursos.
Melhorias na compressão zip para reduzir o tamanho de um ficheiro comprimido. Consulte o namespace System.IO.Compression.
Capacidade de personalizar um contexto de reflexão para substituir o comportamento de reflexão padrão através da classe CustomReflectionContext.
Suporte para a versão de 2008 do padrão Internationalized Domain Names in Applications (IDNA) quando a classe System.Globalization.IdnMapping é usada em Windows 8.
Delegação da comparação de strings ao sistema operativo, que implementa Unicode 6.0, quando o .NET Framework é usado no Windows 8. Quando executado em outras plataformas, o .NET Framework inclui os seus próprios dados de comparação de cadeias de caracteres, que implementam Unicode 5.x. Consulte a classe String e a seção Comentários da classe SortVersion.
Capacidade de calcular os códigos hash para cadeias de caracteres por domínio de aplicativo. Ver
<UseRandomizedStringHashAlgorithm>Elemento.Suporte para reflexão de tipo dividido entre classes Type e TypeInfo. Veja Reflection no Framework .NET para aplicações da Windows Store.
Estrutura de extensibilidade gerenciada (MEF)
No .NET Framework 4.5, o Managed Extensibility Framework (MEF) fornece as seguintes novas funcionalidades:
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 do MEF que podes usar quando crias aplicações da Windows 8.x Store. Esse subconjunto está disponível como um pacote para download na Galeria NuGet. Para instalar o pacote, abra o seu projeto em Visual Studio, escolha Gerir Pacotes NuGet no menu Project e procure online o pacote
Microsoft.Composition.
Para obter mais informações, consulte Managed Extensibility Framework (MEF).
Operações de arquivo assíncronas
No .NET Framework 4.5, foram adicionadas novas funcionalidades assíncronas à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 Entrada/Saída de arquivo assíncrono.
Ferramentas
No .NET Framework 4.5, o Gerador de Ficheiros de Recursos (Resgen.exe) permite-lhe criar um ficheiro .resw para utilização em aplicações da Windows 8.x Store a partir de um ficheiro .resources embutido numa assembly do .NET Framework. Para obter mais informações, consulte Resgen.exe (Resource File Generator).
A Otimização Guiada por Perfil Gerenciado (Mpgo.exe) permite melhorar 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 aplicativos de imagem nativa. Consulte Mpgo.exe (Ferramenta de Otimização Guiada de Perfil Gerido). A partir de Visual Studio 2013, pode usar Mpgo.exe para otimizar aplicações da Windows 8.x Store, bem como aplicações de ambiente de trabalho.
Computação paralela
O .NET Framework 4.5 oferece várias novas funcionalidades 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. Veja a entrada O que há de novo para o Paralelismo no .NET Framework 4.5 no blogue Parallel Programming with .NET.
Web
ASP.NET 4.5 e 4.5.1 adicionam binding de modelos para Web Forms, suporte a WebSocket, manipuladores assíncronos, melhorias de desempenho e muitas outras funcionalidades. Para obter mais informações, consulte os seguintes recursos:
Conectividade
O .NET Framework 4.5 fornece uma nova interface de programação para aplicações HTTP. Para obter mais informações, consulte os novos namespaces System.Net.Http e System.Net.Http.Headers.
Também está incluído suporte para uma nova interface de programação para aceitar e interagir com uma conexão WebSocket usando o HttpListener existente e classes relacionadas. Para obter mais informações, consulte o novo namespace System.Net.WebSockets e a classe HttpListener.
Além disso, o .NET Framework 4.5 inclui as seguintes melhorias de rede:
Suporte a URI compatível com RFC. Para obter mais informações, consulte Uri e classes relacionadas.
Suporte para análise de nomes de domínio internacionalizados (IDN). Para obter mais informações, consulte Uri e classes relacionadas.
Suporte para Internacionalização de Endereço de Email (EAI). Para obter mais informações, consulte o namespace System.Net.Mail.
Suporte IPv6 melhorado. Para obter mais informações, consulte o namespace System.Net.NetworkInformation.
Suporte de soquete de modo duplo. Para obter mais informações, consulte as classes Socket e TcpListener.
Windows Presentation Foundation (WPF)
No .NET Framework 4.5, o Windows Presentation Foundation (WPF) contém alterações e melhorias nas seguintes áreas:
O novo controle Ribbon, que permite implementar uma interface de usuário da faixa de opções que hospeda uma Barra de Ferramentas de Acesso Rápido, Menu de Aplicativo e guias.
A nova interface INotifyDataErrorInfo, que suporta validação de dados síncrona e assíncrona.
Novos recursos para as classes VirtualizingPanel e Dispatcher.
Desempenho aprimorado ao exibir grandes conjuntos de dados agrupados e ao acessar coleções em threads que não são da interface do usuário.
Vinculação de dados a propriedades estáticas, vinculação de dados a tipos personalizados que implementam a interface ICustomTypeProvider e recuperação de informações de vinculação de dados de uma expressão de associação.
Reposicionamento de dados à medida que os valores mudam (live shaping).
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 melhorado para a implementação de 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, foram adicionadas as seguintes funcionalidades para tornar mais simples a escrita e manutenção de aplicações Windows Communication Foundation (WCF):
Simplificação dos arquivos de configuração gerados.
Suporte para desenvolvimento orientado a contratos.
Capacidade de configurar o modo de compatibilidade ASP.NET de forma mais fácil.
Alterações nos valores padrão das propriedades de transporte para reduzir a necessidade de ter que defini-los.
Atualizações para a classe XmlDictionaryReaderQuotas para reduzir a probabilidade de que você terá que configurar manualmente cotas para leitores de dicionário XML.
Validação dos ficheiros de configuração WCF pelo Visual Studio como parte do processo de compilação, para que possas detetar erros de configuração antes de executares a tua aplicação.
Novo suporte de streaming assíncrono.
Novo mapeamento do protocolo HTTPS para facilitar a exposição de um endpoint através de HTTPS com o Internet Information Services (IIS).
Capacidade de gerar metadados em um único documento WSDL anexando
?singleWSDLà URL do serviço.Suporte de Websockets para permitir uma comunicação bidirecional verdadeira através das portas 80 e 443 com as características de desempenho semelhantes ao transporte TCP.
Suporte para configuração de serviços em código.
Dicas de ferramentas do Editor XML.
ChannelFactory suporte para cache.
Suporte para compressão por codificação binária.
Suporte para um transporte UDP que permite aos programadores escrever serviços que usam mensagens "enviar e esquecer". Um cliente envia uma mensagem para um serviço e não espera nenhuma resposta do serviço.
Capacidade de suportar vários modos de autenticação num único ponto de extremidade WCF ao usar transporte HTTP, e segurança de transporte.
Suporte para serviços WCF que usam nomes de domínio internacionalizados (IDNs).
Para mais informações, consulte O que há de novo em Windows Communication Foundation.
Fundação do Fluxo de Trabalho do Windows (WF)
No .NET Framework 4.5, foram adicionadas várias novas funcionalidades ao Windows Workflow Foundation (WF), incluindo:
Fluxos de trabalho de máquina de estados, que foram inicialmente introduzidos como parte do .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). Esta atualização incluiu várias novas classes e atividades que permitiram aos desenvolvedores criar fluxos de trabalho de máquina de estado. Estas aulas 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 em máquina de estado, incluindo: StateMachine, Statee Transition.
Recursos aprimorados do Designer de Fluxo de Trabalho, como os seguintes:
Capacidades melhoradas de pesquisa de fluxo de trabalho em Visual Studio, incluindo Quick Find e Find in Files.
Capacidade de criar automaticamente uma atividade de Sequência quando uma segunda atividade filho é adicionada a uma atividade de contêiner e de incluir ambas as atividades na atividade de Sequência.
Suporte ao movimento panorâmico, que permite alterar a porção visível de um fluxo de trabalho sem usar as barras de deslocamento.
Uma nova Visão de Estrutura de Documento que mostra os componentes de um fluxo de trabalho num formato de estrutura de tópicos em estilo de árvore e permite selecionar um componente na Visão de Estrutura de Documento.
Capacidade de adicionar anotações às 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 máquinas de estados e fluxogramas.
Armazenamento das informações de estado de exibição de 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 em C#:
Projetos de workflow que usam Visual Basic usam expressões Visual Basic, e projetos de workflow C# usam expressões C#.
Projetos de workflow C# criados no Visual Studio 2010 e que têm expressões Visual Basic são compatíveis com projetos de workflow C# que utilizam expressões C#.
Melhorias no controle de versão:
A nova classe WorkflowIdentity, 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ços com abordagem 'contract-first', que fornece suporte para gerar automaticamente atividades que correspondam a um contrato de serviço existente.
Para mais informações, consulte What's New in Windows Workflow Foundation.
.NET para aplicações da loja do Windows 8.x
Aplicações da Loja do Windows 8.x são concebidas para fatores de formato específicos e aproveitam a potência do sistema operativo Windows. Um subconjunto do .NET Framework 4.5 ou 4.5.1 está disponível para construir aplicações da Windows 8.x Store para Windows usando C# ou Visual Basic. Este subconjunto chama-se .NET para aplicações da Windows 8.x Store e é discutido numa visão geral.
Bibliotecas de classes portáteis
O projeto Portable Class Library no Visual Studio 2012 (e versões posteriores) permite-lhe escrever e compilar assemblies geridos que funcionam em várias plataformas do .NET Framework. Usando um projeto de Biblioteca de Classes Portáteis, escolhe as plataformas (como Windows Phone e .NET para aplicações para a Windows 8.x Store) que pretende direcionar. 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 Biblioteca de Classes Portátil.