O que há de novo em .NET Framework
Nota
.NET Framework 4.8 é a última versão do .NET Framework. .NET Framework é reparado mensalmente com correções de segurança e fiabilidade. .NET Framework continuará a ser incluída com Windows, sem planos de removê-lo. Não precisa de migrar as suas aplicações .NET Framework, mas para novos desenvolvimentos, use .NET 5 ou mais tarde.
Este artigo resume as principais novidades e melhorias nas seguintes versões de .NET Framework:
- .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 completas sobre cada nova funcionalidade e está sujeito a alterações. Para obter informações gerais sobre .NET Framework, consulte Introdução. Para plataformas suportadas, consulte os Requisitos do Sistema. Para descarregar links e instruções de instalação, consulte o Guia de Instalação.
Nota
A equipa .NET Framework também lança funcionalidades fora da banda, utilizando o NuGet, para expandir o suporte da plataforma e introduzir novas funcionalidades, como coleções imutáveis e tipos de vetores ativados por SIMD. Para obter mais informações, consulte Bibliotecas de Classe Adicionais e APIs e .NET Framework e lançamentos fora de banda. Consulte uma lista completa de pacotes NuGet para .NET Framework.
Apresentando .NET Framework 4.8
.NET Framework 4.8 baseia-se em versões anteriores de .NET Framework 4.x adicionando muitas novas correções e várias novas funcionalidades, mantendo-se um produto muito estável.
Baixar e instalar .NET Framework 4.8
Pode baixar .NET Framework 4.8 das seguintes localizações:
.NET Framework 4.8 pode ser instalado no Windows 10, Windows 8.1, Windows 7 SP1, e as correspondentes plataformas de servidor a começar pelo Windows Servidor 2008 R2 SP1. Pode instalar .NET Framework 4.8 utilizando o instalador web ou o instalador offline. A forma recomendada para a maioria dos utilizadores é utilizar o instalador web.
Pode .NET Framework 4.8 em Visual Studio 2012 ou mais tarde instalando o .NET Framework 4.8 Developer Pack.
Novidades no .NET Framework 4.8
.NET Framework 4.8 introduz novas funcionalidades nas seguintes áreas:
- Aulas base
- Windows Communication Foundation (WCF)
- Windows Presentation Foundation (WPF)
- Tempo de execução da linguagem comum
A melhoria da acessibilidade, que permite que uma aplicação proporcione uma experiência adequada aos utilizadores de Tecnologia Assistida, continua a ser um grande foco de .NET Framework 4.8. Para obter informações sobre melhorias de acessibilidade em .NET Framework 4.8, consulte as novidades da acessibilidade em .NET Framework.
Aulas base
Impacto fips reduzido na Criptografia. Em versões anteriores de .NET Framework, as classes de fornecedores criptográficos geridos, como SHA256Managed lançar uma CryptographicException quando as bibliotecas criptográficas do sistema são configuradas em "modo FIPS". Estas exceções são lançadas porque as versões geridas das classes de fornecedores criptográficos, ao contrário das bibliotecas criptográficas do sistema, não foram submetidas a certificação FIPS (Federal Information Processing Standards) 140-2. Como poucos desenvolvedores têm as suas máquinas de desenvolvimento em modo FIPS, as exceções são geralmente lançadas em sistemas de produção.
Por padrão nas aplicações que visam .NET Framework 4.8, as seguintes aulas de criptografia geridas já não lançam um CryptographicException neste caso:
- MD5Cng
- MD5CryptoServiceProvider
- RC2CryptoServiceProvider
- RijndaelManaged
- RIPEMD160Managed
- SHA256Managed
Em vez disso, estas aulas redirecionam as operações criptográficas para uma biblioteca de criptografia do sistema. Esta alteração elimina efetivamente uma diferença potencialmente confusa entre ambientes de desenvolvimento e ambientes de produção e faz com que os componentes nativos e os componentes geridos funcionem sob a mesma política criptográfica. As aplicações que dependem destas exceções podem restaurar o comportamento anterior definindo o interruptor Switch.System.Security.Cryptography.UseLegacyFipsThrow
AppContext para true
. Para obter mais informações, consulte as aulas de criptografia geridas não lançam uma CriptografiaException no modo FIPS.
Utilização da versão atualizada do ZLib
Começando com .NET Framework 4.5, o conjunto clrcompression.dll utiliza zLib, uma biblioteca externa nativa para compressão de dados, de forma a fornecer uma implementação para o algoritmo de esvaziamento. A versão 4.8 de .NET Framework de clrcompression.dll é atualizada para utilizar a versão ZLib 1.2.11, que inclui várias melhorias e correções chave.
Windows Communication Foundation (WCF)
Introdução do ServiceHealthBehavior
Os pontos finais da saúde são amplamente utilizados por ferramentas de orquestração para gerir serviços com base no seu estado de saúde. Os controlos de saúde também podem ser utilizados através de ferramentas de monitorização para acompanhar e fornecer notificações sobre a disponibilidade e desempenho de um serviço.
ServiceHealthBehavior é um comportamento de serviço wcf que se estende IServiceBehavior. Quando adicionado à ServiceDescription.Behaviors coleção, um comportamento de serviço faz o seguinte:
Devolve o estado de saúde do serviço com códigos de resposta HTTP. Pode especificar numa cadeia de consulta o código de estado HTTP/GET para um pedido de sonda de saúde HTTP/GET.
Publica informação sobre saúde do serviço. Detalhes específicos do serviço, incluindo estado de serviço, contagem de aceleração e capacidade podem ser exibidos usando um pedido HTTP/GET com o
?health
string de consulta. A facilidade de acesso a essas informações é importante quando se trata de um serviço WCF mal comportado.
Existem duas formas de expor o ponto final da saúde e publicar informações de saúde do serviço WCF:
Através do código. Por exemplo:
ServiceHost host = new ServiceHost(typeof(Service1), new Uri("http://contoso:81/Service1")); ServiceHealthBehavior healthBehavior = host.Description.Behaviors.Find<ServiceHealthBehavior>(); healthBehavior ??= new ServiceHealthBehavior(); host.Description.Behaviors.Add(healthBehavior);
Dim host As New ServiceHost(GetType(Service1), New Uri("http://contoso:81/Service1")) Dim healthBehavior As ServiceHealthBehavior = host.Description.Behaviors.Find(Of ServiceHealthBehavior)() If healthBehavior Is Nothing Then healthBehavior = New ServiceHealthBehavior() End If host.Description.Behaviors.Add(healthBehavior)
Utilizando um ficheiro de configuração. Por exemplo:
<behaviors> <serviceBehaviors> <behavior name="DefaultBehavior"> <serviceHealth httpsGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors>
O estado de saúde de um serviço pode ser consultado utilizando parâmetros de consulta comoOnServiceFailure
, , , OnListenerFailure
, - OnThrottlePercentExceeded
- e um código de resposta HTTP pode ser especificado para cada OnDispatcherFailure
parâmetro de consulta. Se o código de resposta HTTP for omitido para um parâmetro de consulta, é utilizado por predefinição um código de resposta HTTP 503. Por exemplo:
OnServiceFailure:
https://contoso:81/Service1?health&OnServiceFailure=450
Um código de estado de resposta HTTP 450 é devolvido quando o ServiceHost.State é maior do que CommunicationState.Opened.
Parâmetros e exemplos de consulta:
OnDispatcherFailure:
https://contoso:81/Service1?health&OnDispatcherFailure=455
Um código de estado de resposta HTTP 455 é devolvido quando o estado de qualquer um dos despachantes do canal é maior do que CommunicationState.Opened.
OnListenerFailure:
https://contoso:81/Service1?health&OnListenerFailure=465
Um código de estado de resposta HTTP 465 é devolvido quando o estado de qualquer um dos ouvintes do canal é maior do que CommunicationState.Opened.
OnThrottlePercentExceed:
https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500
Especifica a percentagem {1 – 100} que aciona a resposta e o seu código de resposta HTTP {200 - 599}. Neste exemplo:
Se a percentagem for superior a 95, é devolvido um código de resposta HTTP de 500.
Se a percentagem for entre 70 e 95, 350 são devolvidos.
Caso contrário, 200 são devolvidos.
O estado de saúde do serviço pode ser exibido em HTML especificando uma cadeia de consulta como https://contoso:81/Service1?health
ou em XML especificando uma cadeia de consulta como https://contoso:81/Service1?health&Xml
. Uma cadeia de consulta como https://contoso:81/Service1?health&NoContent
devolve uma página HTML vazia.
Windows Presentation Foundation (WPF)
Melhorias elevadas do DPI
Em .NET Framework 4.8, o WPF adiciona suporte para Per-Monitor Per-Monitor DPI DPI Awareness e Mixed-Mode DPI. Consulte o Desenvolvimento de Aplicações de Desktop high DPI em Windows para obter informações adicionais sobre o desenvolvimento de DPI elevado.
.NET Framework 4.8 melhora o suporte aos HWNDs hospedados e a interoperação Windows Forms em aplicações WPF de Alto DPI em plataformas que suportam Mixed-Mode escala de DPI (a partir de Windows 10 Atualização de abril de 2018). Quando os HWNDs ou Windows Forms de comandos são criados como Mixed-Mode janelas em escala DPI, chamando SetThreadDpiHostingBehavior e SetThreadDpiAwarenessContext, podem ser hospedados numa aplicação V2 WPF Per-Monitor e são dimensionados e dimensionados adequadamente. Estes conteúdos alojados não são prestados no DPI nativo; em vez disso, o sistema operativo dimensiona o conteúdo alojado para o tamanho adequado. O suporte para Per-Monitor modo de consciência V2 DPI também permite que os controlos WPF sejam hospedados (isto é, parentados) numa janela nativa numa aplicação de alta DPI.
Para ativar o suporte para Mixed-Mode escala de DPI elevado, pode definir o seguinte AppContext comuta o ficheiro de configuração da aplicação:
<runtime>
<AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>
Tempo de execução da linguagem comum
O tempo de funcionamento .NET Framework 4.8 inclui as seguintes alterações e melhorias:
Melhorias no compilador JIT. O compilador Just-in-time (JIT) em .NET Framework 4.8 baseia-se no compilador JIT em .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 6 JIT .NET Framework.
Melhorias no NGEN. O tempo de execução melhorou a sua gestão de memória para imagens do Gerador de Imagem Nativa (NGEN) para que os dados mapeados a partir de imagens NGEN não sejam residentes na memória. Isto reduz a área de superfície disponível para ataques que tentam executar código arbitrário modificando a memória que será executada.
Pesquisa de antimalware para todos os conjuntos. Em versões anteriores de .NET Framework, o tempo de execução verifica todos os conjuntos carregados a partir de disco utilizando software antimalware Windows Defender ou de terceiros. No entanto, os conjuntos carregados de outras fontes, como pelo Assembly.Load(Byte[]) método, não são digitalizados e podem potencialmente conter malware não detetado. Começando com .NET Framework 4.8 em execução em Windows 10, o tempo de execução desencadeia uma verificação por soluções antimalware que implementam a Interface de Digitalização antimalware (AMSI).
Novidades em .NET Framework 4.7.2
.NET Framework 4.7.2 inclui novas funcionalidades nas seguintes áreas:
Um foco contínuo na .NET Framework 4.7.2 é uma melhor acessibilidade, que permite que uma aplicação proporcione uma experiência adequada aos utilizadores de Tecnologia assistida. Para obter informações sobre melhorias de acessibilidade em .NET Framework 4.7.2, consulte as novidades da acessibilidade em .NET Framework.
Aulas base
.NET Framework 4.7.2 apresenta um grande número de melhorias criptográficas, melhor suporte à descompressão para arquivos ZIP e APIs de recolha adicional.
Novas sobrecargas de RSA. Criar e DSA. Criar
Os DSA.Create(DSAParameters) métodos permitem RSA.Create(RSAParameters) fornecer parâmetros-chave ao instantaneamente uma nova DSA ou RSA chave. Permitem substituir código como:
// 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 um código como este:
// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
// Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
' Other code to execute using the rsa instance.
End Using
Os DSA.Create(Int32) métodos permitem-lhe RSA.Create(Int32) gerar novas DSA ou RSA teclas com um tamanho específico da chave. 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 haxixe
A Rfc2898DeriveBytes classe tem três novos construtores com um HashAlgorithmName parâmetro que identifica o algoritmo HMAC para usar ao derivar chaves. Em vez de utilizarem SHA-1, os desenvolvedores devem utilizar um HMAC baseado em SHA-2 como SHA-256, como mostra o seguinte exemplo:
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 de PFX pode, opcionalmente, carregar as chaves privadas diretamente da memória, contornando o disco rígido. Quando a nova X509KeyStorageFlags.EphemeralKeySet bandeira for especificada num X509Certificate2 construtor ou numa das sobrecargas do X509Certificate2.Import método, as teclas privadas serão carregadas como teclas efémeras. Isto evita que as teclas sejam visíveis no disco. No entanto:
Uma vez que as chaves não são persistidos ao disco, os certificados carregados com esta bandeira não são bons candidatos a adicionar a uma Loja X509.
As chaves carregadas desta forma são quase sempre carregadas através de Windows CNG. Por isso, os chamadores devem aceder à chave privada, chamando métodos de extensão, como o cert. GetRSaPrivateKey(). A X509Certificate2.PrivateKey propriedade não funciona.
Uma vez que a propriedade antiga X509Certificate2.PrivateKey não funciona com certificados, os desenvolvedores devem realizar testes rigorosos antes de mudar para chaves efémeras.
Criação programática de pedidos de assinatura de certificação PKCS#10 e certificados de chave público X.509
A partir de .NET Framework 4.7.2, as cargas de trabalho podem gerar pedidos de assinatura de certificados (RSE), o que permite que a geração de pedidos de certificado seja encenada na ferramenta existente. Isto é frequentemente útil em cenários de teste.
Para obter 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úblico X.509" no Blog .NET.
Novos membros do SignerInfo
Começando com .NET Framework 4.7.2, a SignerInfo classe expõe mais informações sobre a assinatura. Pode recuperar o valor da propriedade para determinar o algoritmo de System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm assinatura utilizado pelo signatário. SignerInfo.GetSignature pode ser chamado para obter uma cópia da assinatura criptográfica para este signatário.
Deixando um fluxo embrulhado aberto depois de CryptoStream ser eliminado
Começando com .NET Framework 4.7.2, a CryptoStream classe tem um construtor adicional que permite Dispose não fechar o fluxo embrulhado. Para deixar o fluxo embrulhado aberto após a eliminação do CryptoStream caso, ligue para o novo CryptoStream construtor da seguinte forma:
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
Começando com .NET Framework 4.7.2, a implementação de operações de descompressão na DeflateStream classe mudou para utilizar apis nativo Windows por padrão. Normalmente, isto resulta numa melhoria substancial do desempenho.
O suporte à descompressão utilizando Windows APIs é ativado por padrão para aplicações que visam .NET Framework 4.7.2. As aplicações que visam versões anteriores de .NET Framework mas que estão a ser executando sob .NET Framework 4.7.2 podem optar por este comportamento adicionando o seguinte switch AppContext ao ficheiro de configuração da aplicação:
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />
APIs de coleção adicional
.NET Framework 4.7.2 adiciona uma série de novas APIs aos SortedSet<T>HashSet<T> e tipos. Incluem-se:
TryGetValue
métodos, que alargam o padrão de tentativa utilizado em outros tipos de recolha para estes dois tipos. Os métodos são:Enumerable.To*
métodos de extensão, que convertem uma coleção para:HashSet<T>Novos HashSet<T> construtores que lhe permitem definir a capacidade da coleção, o que dá um benefício ao desempenho quando se sabe o tamanho do HashSet<T> adiantado:
A ConcurrentDictionary<TKey,TValue> classe inclui novas sobrecargas e AddOrUpdateGetOrAdd métodos para recuperar um valor do dicionário ou para adicioná-lo se não for encontrado, e adicionar um valor ao dicionário ou atualizá-lo se 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
Apoio à injeção de dependência na Web Forms
A injeção de dependência (DI) dissocia os objetos e as suas dependências para que o código de um objeto já não seja alterado apenas porque a dependência mudou. Ao desenvolver aplicações ASP.NET que visam .NET Framework 4.7.2, pode:
Utilize injeção baseada em setter, baseada em interface e construtor em manipuladores e módulos, instâncias de página e controlos de utilizadores de projetos de aplicação web ASP.NET.
Utilize a injeção baseada em setter e baseada em interface em manipuladores e módulos, instâncias de página e controlos do utilizador de projetos ASP.NET web site.
Ligue diferentes quadros de injeção de dependência.
Suporte para cookies no mesmo local
O SameSite impede que um navegador envie um cookie juntamente com um pedido de cross-site. .NET Framework 4.7.2 adiciona um HttpCookie.SameSite imóvel cujo valor é um System.Web.SameSiteMode membro enumeração. Se o seu valor for SameSiteMode.Strict ouSameSiteMode.Lax, ASP.NET adiciona o SameSite
atributo ao cabeçalho de cookies. O suporte SameSite aplica-se a HttpCookie objetos, bem como a FormsAuthentication e System.Web.SessionState cookies.
Pode definir o SameSite para um HttpCookie objeto da seguinte forma:
var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax
Também pode configurar cookies SameSite ao nível da aplicação modificando o ficheiro web.config:
<system.web>
<httpCookies sameSite="Strict" />
</system.web>
Pode adicionar SameSite FormsAuthentication e System.Web.SessionState cookies modificando o ficheiro configurar a web:
<system.web>
<authentication mode="Forms">
<forms cookieSameSite="Lax">
<!-- ... -->
</forms>
</authentication>
<sessionState cookieSameSite="Lax"></sessionState>
</system.web>
Rede
Implementação de propriedades httpClientHandler
.NET Framework 4.7.1 adicionou oito propriedades à System.Net.Http.HttpClientHandler classe. No entanto, dois atiraram um PlatformNotSupportedException. .NET Framework 4.7.2 fornece agora uma implementação para estes imóveis. As propriedades são:
SQLClient
Apoio à autenticação universal e à autenticação Azure Ative Directory
O aumento das exigências de conformidade e segurança exige que muitos clientes utilizem a autenticação multifactor (MFA). Além disso, as boas práticas atuais desencorajam, incluindo senhas de utilizador diretamente em cadeias de ligação. Para suportar estas alterações, .NET Framework 4.7.2 alarga as cadeias de ligação SQLClient adicionando um novo valor, "Ative Directory Interactive", para a palavra-chave "Autenticação" existente para suporte à Autenticação AD MFA e Azure. O novo método interativo suporta utilizadores azure AD nativos e federados, bem como utilizadores convidados AZure AD. Quando este método é utilizado, a autenticação MFA imposta pela Azure AD é suportada para SQL bases de dados. Além disso, o processo de autenticação solicita uma senha de utilizador para aderir às melhores práticas de segurança.
Em versões anteriores de .NET Framework, SQL conectividade suportava apenas as SqlAuthenticationMethod.ActiveDirectoryPasswordSqlAuthenticationMethod.ActiveDirectoryIntegrated e opções. Ambos fazem parte do protocolo ADAL não interativo, que não apoia o MFA. Com a nova SqlAuthenticationMethod.ActiveDirectoryInteractive opção, a conectividade SQL suporta mFA, bem como os métodos de autenticação existentes (palavra-passe e autenticação integrada), que permite aos utilizadores introduzir palavras-passe do utilizador interativamente sem persistir em palavras-passe na cadeia de ligação.
Para mais informações e um exemplo, consulte "SQL -- Suporte universal e multifactor de autenticação Azure AD" no Blog .NET.
Suporte para Always Encrypted versão 2
O Quadro NET 4.7.2 acrescenta apoios à Always Encrypted baseada no enclave. A versão original de Always Encrypted é uma tecnologia de encriptação do lado do cliente em que as chaves de encriptação nunca deixam o cliente. Em Always Encrypted baseados em enclaves, o cliente pode opcionalmente enviar as chaves de encriptação para um enclave seguro, que é uma entidade computacional segura que pode ser considerada parte de SQL Server mas que SQL Server código não pode adulterar. Para apoiar Always Encrypted baseadas em enclaves, .NET Framework 4.7.2 adiciona aos seguintes tipos e membros o System.Data.SqlClient espaço de nome:
SqlConnectionStringBuilder.EnclaveAttestationUrl, que especifica o Uri para Always Encrypted baseados em enclaves.
SqlColumnEncryptionEnclaveProvider, que é uma classe abstrata da qual todos os fornecedores de enclave são derivados.
SqlEnclaveSession, que encapsula o estado para uma determinada sessão de enclave.
SqlEnclaveAttestationParameters, que fornece os parâmetros de atestado utilizados por SQL Server para obter informações necessárias para executar um determinado Protocolo de Attestation.
O ficheiro de configuração da aplicação especifica então uma implementação concreta da classe abstrata System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider que fornece a funcionalidade para o fornecedor do 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 de Always Encrypted baseados no enclave é:
O utilizador cria uma ligação AlwaysEncrypted a SQL Server que suportava Always Encrypted baseadas em enclaves. O controlador contacta o serviço de atestado para garantir que está ligado ao enclave direito.
Uma vez atestado o enclave, o condutor estabelece um canal seguro com o enclave seguro alojado no SQL Server.
O controlador partilha chaves de encriptação autorizadas pelo cliente com o enclave seguro durante o período de SQL ligação.
Windows Presentation Foundation
Encontrar RecursosDictions by Source
Começando com .NET Framework 4.7.2, um assistente de diagnóstico pode localizar o ResourceDictionaries que foi criado a partir de uma determinada fonte Uri. (Esta funcionalidade destina-se a ser utilizada por assistentes de diagnóstico e não por aplicações de produção.) Um assistente de diagnóstico, como a facilidade "Edit-and-Continue" da Visual Studio, permite ao utilizador editar uma Lista de Recursos com a intenção de que as alterações sejam aplicadas à aplicação em execução. Um passo para conseguir isto é encontrar todos os RecursosDictions que a aplicação de execução criou a partir do dicionário que está a ser editado. Por exemplo, uma aplicação pode declarar um Datadário de Recursos cujo conteúdo é copiado de uma determinada fonte URI:
<ResourceDictionary Source="MyRD.xaml" />
Um assistente de diagnóstico que edita a marcação original em MyRD.xaml pode usar a nova funcionalidade para localizar o dicionário. A funcionalidade é implementada 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, como ilustrado pelo seguinte código:
IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))
O método devolve um enumerado vazio a menos que esteja VisualDiagnostics ativado e a variável ambiental ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO
seja definida.
Encontrar proprietários de recursos
Começando com .NET Framework 4.7.2, um assistente de diagnóstico pode localizar os proprietários de um dado ResourceDictionary. (A funcionalidade destina-se a ser utilizada por assistentes de diagnóstico e não por aplicações de produção.) Sempre que é feita uma alteração a um ResourceDictionary, WPF encontra automaticamente todas as referências DynamicResource que podem ser afetadas pela alteração.
Um assistente de diagnóstico, como a instalação "Edit-and-Continue" da Visual Studio, pode querer alargá-lo para lidar com referências StaticResource. O primeiro passo neste processo é encontrar os proprietários do dicionário; isto é, para encontrar todos os objetos cuja Resources
propriedade se refere ao dicionário (diretamente, ou indiretamente através da ResourceDictionary.MergedDictionaries propriedade). Três novos métodos estáticos implementados na System.Windows.Diagnostics.ResourceDictionaryDiagnostics classe, um para cada um dos tipos de base que tem uma Resources
propriedade, suportam este passo:
Estes métodos devolvem um vazio enumerado a menos que esteja VisualDiagnostics ativado e a variável ambiental ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO
seja definida.
Encontrar referências estáticasresource
Um assistente de diagnóstico pode agora receber uma notificação sempre que uma referência StaticResource é resolvida. (A funcionalidade destina-se a ser utilizada por assistentes de diagnóstico e não por aplicações de produção.) Um assistente de diagnóstico, como a instalação "Edit-and-Continue" da Visual Studio, pode querer atualizar todas as utilizações de um recurso quando o seu valor numa ResourceDictionary alteração. O WPF faz isto automaticamente para referências DynamicResource , mas intencionalmente não o faz para referências StaticResource . Começando com .NET Framework 4.7.2, o assistente de diagnóstico pode utilizar estas notificações para localizar as utilizações do recurso estático.
A notificação é implementada pelo novo ResourceDictionaryDiagnostics.StaticResourceResolved evento:
public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)
Este evento é levantado sempre que o tempo de execução resolve uma referência StaticResource . Os StaticResourceResolvedEventArgs argumentos descrevem a resolução e indicam o objeto e a propriedade que acolhem a referência StaticResource e a ResourceDictionary chave utilizada para a resolução:
public class StaticResourceResolvedEventArgs : EventArgs
{
public Object TargetObject { get; }
public Object TargetProperty { get; }
public ResourceDictionary ResourceDictionary { get; }
public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
Public ReadOnly Property TargetObject As Object
Public ReadOnly Property TargetProperty As Object
Public ReadOnly Property ResourceDictionary As ResourceDictionary
Public ReadOnly Property ResourceKey As Object
End Class
O evento não é levantado (e o seu add
acessório é ignorado) a menos que esteja VisualDiagnostics ativado e a variável ambiental ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO
seja definida.
ClickOnce
As aplicações de Windows Forms, Windows Presentation Foundation e Visual Studio ferramentas para Office (VSTO) podem ser implementadas através da utilização de ClickOnce. Se for encontrada a seguinte entrada no manifesto de aplicação, a implantação terá êxito ao abrigo .NET Framework 4.7.2:
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
Para Windows Forms aplicação, a solução anterior para a definição da consciência do DPI no ficheiro de configuração da aplicação em vez do manifesto de aplicação já não é necessária para que ClickOnce implementação tenha sucesso.
Novidades em .NET Framework 4.7.1
.NET Framework 4.7.1 inclui novas funcionalidades nas seguintes áreas:
Além disso, um grande foco no .NET Framework 4.7.1 é a melhoria da acessibilidade, que permite que uma aplicação proporcione uma experiência adequada aos utilizadores de Tecnologia Assistida. Para obter informações sobre melhorias de acessibilidade em .NET Framework 4.7.1, consulte as novidades na acessibilidade em .NET Framework.
Aulas base
Suporte para .NET Standard 2.0
.NET Standard define um conjunto de APIs que devem estar disponíveis em cada implementação .NET que suporta essa versão da norma. .NET Framework 4.7.1 suporta totalmente .NET Standard 2.0 e adiciona cerca de 200 APIs que são definidos em .NET Standard 2.0 e estão ausentes de .NET Framework 4.6.1, 4.6.2 e 4.7. (Note que estas versões de suporte .NET Framework .NET Standard 2.0 apenas se forem também implantados ficheiros de suporte .NET Standard adicionais no sistema-alvo.) Para obter mais informações, consulte "BCL - .NET Standard 2.0 Support" no .NET Framework publicação de blog 4.7.1 Runtime and Compiler Features.
Suporte para construtores de configuração
Os construtores de configuração permitem que os desenvolvedores injetem e construam configurações de configuração para aplicações dinamicamente no tempo de execução. Os construtores de configuração personalizados podem ser usados para modificar os dados existentes numa secção de configuração ou para construir uma secção de configuração inteiramente a partir do zero. Sem os construtores de configuração, .config ficheiros são estáticos e as suas definições são definidas algum tempo antes de uma aplicação ser lançada.
Para criar um construtor de configurações personalizado, obtém o seu construtor da classe abstrata ConfigurationBuilder e sobrepõe-se à sua ConfigurationBuilder.ProcessConfigurationSection e ConfigurationBuilder.ProcessRawXml. Também define os seus construtores no seu ficheiro .config. Para obter mais informações, consulte a secção "Construtores de Configuração" na .NET Framework ASP.NET e configuração do blog.
Deteção de recursos de tempo de execução
A System.Runtime.CompilerServices.RuntimeFeature classe fornece um mecanismo para determinar se uma função predefinida é suportada numa determinada implementação .NET no tempo de compilação ou tempo de execução. No momento da compilação, um compilador pode verificar se existe um campo especificado para determinar se a funcionalidade é suportada; se assim for, pode emitir código que se aproveite dessa característica. No tempo de execução, uma aplicação pode ligar para o RuntimeFeature.IsSupported método antes de emitir código no tempo de execução. Para obter mais informações, consulte o método do helper para descrever as funcionalidades suportadas pelo tempo de execução.
Os tipos de tuple de valor são serializáveis
Começando com .NET Framework 4.7.1, System.ValueTuple e os seus tipos genéricos associados são marcados como Serializable, o que permite a serialização binária. Isto deve tornar os tipos de Tuple migratórios, tais como Tuple<T1,T2,T3> e Tuple<T1,T2,T3,T4>, para valorizar os tipos de tuple mais fácil. Para obter mais informações, consulte "Compiler -- ValueTuple is Serializable" no .NET Framework publicação de blog 4.7.1 Runtime and Compiler Features.
Apoio a referências apenas à leitura
.NET Framework 4.7.1 adiciona o System.Runtime.CompilerServices.IsReadOnlyAttribute. Este atributo é utilizado por compiladores linguísticos para marcar membros que tenham tipos ou parâmetros de devolução de ref apenas de leitura. Para obter mais informações, consulte "Compiler -- Suporte a LeituraOnlyReferences" na .NET Framework publicação de blog 4.7.1 Runtime and Compiler Features. Para obter informações sobre os valores de retorno do ref, consulte os valores de devolução do Ref e os valores de devolução do ref (C# Guide) e Ref (Visual Basic).
CLR (Common Language Runtime)
Melhorias no desempenho da recolha de lixo
As alterações na recolha de lixo (GC) em .NET Framework 4.7.1 melhoram o desempenho global, especialmente para as dotações de grandes objetos (LOH). Em .NET Framework 4.7.1, são utilizadas fechaduras separadas para pequenas dotações de objetos pequenos (SOH) e LOH, que permite que as dotações de LOH ocorram quando o GC de fundo está a varrer o SOH. Consequentemente, as aplicações que efetuam um grande número de dotações de LOH deverão assistir a uma redução da contenção do bloqueio de atribuição e a um melhor desempenho. Para obter mais informações, consulte a secção "Runtime -- GC Performance Improvements" na .NET Framework publicação de blog 4.7.1 Runtime and Compiler Features.
Rede
Suporte SHA-2 para Mensagem.HashAlgorithm
Em .NET Framework versões 4.7 e anteriores, a Message.HashAlgorithm propriedade suportava valores de HashAlgorithm.Md5 e HashAlgorithm.Sha apenas. Começando com .NET Framework 4.7.1HashAlgorithm.Sha256, HashAlgorithm.Sha384e HashAlgorithm.Sha512 também são apoiados. Se este valor é realmente usado depende do MSMQ, uma vez que o Message caso em si não faz hashing, mas simplesmente passa valores para MSMQ. Para mais informações, consulte a secção "suporte SHA-2 para Mensagem.HashAlgorithm" na secção .NET Framework 4.7.1 ASP.NET e Configuração.
ASP.NET
Etapas de execução em aplicações ASP.NET
ASP.NET processa pedidos num oleoduto predefinido que inclui 23 eventos. ASP.NET executa cada manipulador de eventos como um passo de execução. Nas versões de ASP.NET até .NET Framework 4.7, ASP.NET não consegue fluir o contexto de execução devido à troca entre fios nativos e geridos. Em vez disso, ASP.NET flui seletivamente apenas o HttpContext. Começando com .NET Framework 4.7.1, o método também permite que os HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) módulos restaure os dados ambientais. Esta funcionalidade destina-se a bibliotecas relacionadas com rastreios, perfis, diagnósticos ou transações, por exemplo, que se preocupam com o fluxo de execução da aplicação. Para obter mais informações, consulte a "Funcionalidade de Passo de Execução ASP.NET" no .NET Framework ASP.NET 4.7.1 e publicação de Funcionalidades de Configuração.
ASP.NET HttpCookie
.NET Framework 4.7.1 inclui um novo método, HttpCookie.TryParseque fornece uma forma padronizada de criar um HttpCookie objeto a partir de uma cadeia e atribuir com precisão valores de cookies, tais como data e caminho de validade. Para mais informações, consulte "ASP.NET HttpCookie" no .NET Framework 4.7.1 ASP.NET e Configuração Features post de blog.
Opções de haxixe SHA-2 para ASP.NET formas credenciais de autenticação
Em .NET Framework versões 4.7 e anteriores, ASP.NET permitiu que os desenvolvedores armazenassem credenciais de utilizador com palavras-passe hashed em ficheiros de configuração usando MD5 ou SHA1. Começando com .NET Framework 4.7.1, ASP.NET também suporta novas opções seguras de haxixe SHA-2, tais como SHA256, SHA384 e SHA512. SHA1 continua a ser o padrão, e um algoritmo de haxixe não padrão pode ser definido no ficheiro de configuração web. Por exemplo:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/login.aspx">
<credentials passwordFormat="SHA512">
<user name="jdoe" password="6D003E98EA1C7F04ABF8FCB375388907B7F3EE06F278DB966BE960E7CBBD103DF30CA6D61F7E7FD981B2E4E3A64D43C836A4BEDCA165C33B163E6BCDC538A664" />
</credentials>
</forms>
</authentication>
</system.web>
Novidades em .NET Framework 4.7
.NET Framework 4.7 inclui novas funcionalidades nas seguintes áreas:
- Aulas base
- Redes
- ASP.NET
- Windows Communication Foundation (WCF)
- Windows Forms
- Windows Presentation Foundation (WPF)
Para obter uma lista de novas APIs adicionadas a .NET Framework 4.7, consulte .NET Framework 4.7 Alterações API sobre GitHub. Para obter uma lista de melhorias de funcionalidades e correções de erros em .NET Framework 4.7, consulte .NET Framework lista de alterações de 4.7 em GitHub. Para mais informações, consulte anunciando .NET Framework 4.7 no blog .NET.
Aulas base
.NET Framework 4.7 melhora a serialização pelo DataContractJsonSerializer:
Funcionalidade melhorada com Criptografia da Curva Elíptica (ECC)*
Em .NET Framework 4.7, ImportParameters(ECParameters)
foram adicionados métodos às ECDsa classes e ECDiffieHellman classes para permitir que um objeto representasse uma chave já estabelecida. Foi também adicionado um ExportParameters(Boolean)
método para exportar a chave utilizando parâmetros de curva explícitos.
.NET Framework 4.7 também adiciona suporte para curvas adicionais (incluindo a suite curva Brainpool), e acrescentou definições predefinidas para facilidade de criação através dos métodos novos Create e Create de fábrica.
Pode ver um exemplo de melhorias .NET Framework .NET Framework criptografia 4.7 em GitHub.
Melhor suporte para caracteres de controlo pelo DataContractJsonSerializer
Em .NET Framework 4.7, a DataContractJsonSerializer classe serializa os caracteres de controlo em conformidade com a norma ECMAScript 6. Este comportamento é ativado por padrão para aplicações que visam .NET Framework 4.7, e é uma funcionalidade de opt-in para aplicações que estão a decorrer com .NET Framework 4.7, mas visam uma versão anterior de .NET Framework. Para mais informações, consulte a secção de compatibilidade da Aplicação .
Rede
.NET Framework 4.7 adiciona a seguinte característica relacionada com a rede:
Suporte do sistema operativo predefinido para protocolos TLS*
A pilha TLS, que é utilizada por System.Net.Security.SslStream componentes e up-stack, tais como HTTP, FTP e SMTP, permite que os desenvolvedores utilizem os protocolos TLS predefinidos suportados pelo sistema operativo. Os desenvolvedores já não precisam de um código rígido numa versão TLS.
ASP.NET
Em .NET Framework 4.7, ASP.NET inclui as seguintes novidades:
Extensibilidade da Cache de Objeto
Começando com .NET Framework 4.7, ASP.NET adiciona um novo conjunto de APIs que permitem aos desenvolvedores substituir as implementações de ASP.NET padrão para caching de objetos na memória e monitorização da memória. Os desenvolvedores podem agora substituir qualquer um dos três componentes seguintes se a implementação ASP.NET não for adequada:
Loja cache de objetos. Ao utilizar a nova secção de configuração de fornecedores de cache, os desenvolvedores podem ligar novas implementações de uma cache de objeto para uma aplicação ASP.NET utilizando a nova interface ICacheStoreProvider.
Monitorização da memória. O monitor de memória predefinido em ASP.NET notifica as aplicações quando estão a correr perto do limite de bytes privados configurados para o processo, ou quando a máquina está baixa na RAM física total disponível. Quando estes limites estão próximos, as notificações são disparadas. Para algumas aplicações, as notificações são disparadas demasiado perto dos limites configurados para permitir reações úteis. Os desenvolvedores podem agora escrever os seus próprios monitores de memória para substituir o padrão usando a ApplicationMonitors.MemoryMonitor propriedade.
Reações limite de memória. Por predefinição, ASP.NET tenta aparar a cache do objeto e ligar GC.Collect periodicamente quando o limite de processo de byte privado estiver próximo. Para algumas aplicações, a frequência de chamadas GC.Collect ou a quantidade de cache que é aparada são ineficientes. Os desenvolvedores podem agora substituir ou complementar o comportamento padrão, subscrevendo implementações IObserver no monitor de memória da aplicação.
Windows Communication Foundation (WCF)
Windows Communication Foundation (WCF) adiciona as seguintes funcionalidades e alterações:
Capacidade de configurar as definições de segurança da mensagem predefinida para TLS 1.1 ou TLS 1.2
Começando com .NET Framework 4.7, o WCF permite-lhe configurar os TLS 1.1 ou TLS 1.2 para além do SSL 3.0 e TLS 1.0 como protocolo de segurança por padrão. Esta é uma definição de opt-in; para o ativar, tem de adicionar a seguinte entrada no ficheiro de configuração da sua aplicação:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Melhoria da fiabilidade das aplicações do WCF e da serialização do 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 fiabilidade das opções de serialização. Incluem-se:
- Melhor suporte para misturar código assíncronos e sincronizado em chamadas para SocketConnection.BeginRead e SocketConnection.Read.
- Melhor fiabilidade ao abortar uma ligação com SharedConnectionListener e DuplexChannelBinder.
- Melhor fiabilidade das operações de serialização ao chamar o FormatterServices.GetSerializableMembers(Type) método.
- Melhor fiabilidade ao remover um garçom chamando o método ChannelSynchronizer.RemoveWaiter .
Windows Forms
Em .NET Framework 4.7, Windows Forms melhora o suporte a monitores de DPI elevados.
Suporte de Alto DPI
Começando pelas aplicações que visam .NET Framework 4.7, .NET Framework apresenta um alto DPI e suporte dinâmico de DPI para aplicações Windows Forms. O suporte de Alto DPI melhora a disposição e a aparência de formas e controlos em monitores DPI elevados. O DPI dinâmico altera o layout e a aparência de formulários e controlos quando o utilizador altera o fator de escala DPI ou de exibição de uma aplicação em execução.
O suporte de Alta DPI é uma funcionalidade de opt-in que configura ao definir um <System.Windows. Formulários.Secção de ConfiguraçãoSecção> no ficheiro de configuração da sua aplicação. Para obter mais informações sobre a adição de suporte dPI elevado e suporte dinâmico do DPI à sua aplicação Windows Forms, consulte Suporte DPI de alta Windows Forms.
Windows Presentation Foundation (WPF)
No .NET Framework 4.7, o WPF inclui as seguintes melhorias:
Suporte para uma pilha touch/stylus com base em mensagens Windows WM_POINTER
Tem agora a opção de utilizar uma pilha touch/stylus com base em mensagens WM_POINTER em vez da Plataforma de Serviços Windows Ink (WISP). Esta é uma característica de opt-in em .NET Framework. Para mais informações, consulte a secção de compatibilidade da Aplicação .
Nova implementação para APIs de impressão WPF
As APIs de impressão da WPF na System.Printing.PrintQueue classe chamam a API do pacote de impressão Windows em vez da API de impressão de XPS precotado. Para o impacto desta alteração na compatibilidade da aplicação, consulte a secção de compatibilidade da Aplicação .
Novidades em .NET Framework 4.6.2
.NET Framework 4.6.2 inclui novas funcionalidades nas seguintes áreas:
Para obter uma lista de novas APIs adicionadas a .NET Framework 4.6.2, consulte .NET Framework 4.6.2 Alterações API sobre GitHub. Para obter uma lista de melhorias de funcionalidades e correções de erros em .NET Framework 4.6.2, consulte .NET Framework lista de alterações de 4.6.2 em GitHub. Para mais informações, consulte anunciando .NET Framework 4.6.2 no blog .NET.
ASP.NET
Em .NET Framework 4.6.2, ASP.NET inclui as seguintes melhorias:
Melhor suporte para mensagens de erro localizadas nos validadores de anotação de dados
Os validadores de anotação de dados permitem-lhe realizar validação adicionando um ou mais atributos a uma propriedade de classe. O elemento do ValidationAttribute.ErrorMessage atributo define o texto da mensagem de erro se a validação falhar. Começando com .NET Framework 4.6.2, ASP.NET facilita a localização de mensagens de erro. As mensagens de erro serão localizadas se:
O ValidationAttribute.ErrorMessage é fornecido no atributo de validação.
O ficheiro de recursos é armazenado na pasta App_LocalResources.
O nome do ficheiro de recursos localizados tem o nome
}.resx
do formulárioDataAnnotation.Localization.{
, onde o nome é um nome de cultura no formato idiomasCodecountry-
/regionCode ou languageCode.O nome chave do recurso é a cadeia atribuída ao atributo, e o ValidationAttribute.ErrorMessage 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
Pode então criar um ficheiro de recursos, DataAnnotation.Localização.fr.resx, cuja chave é a cadeia de mensagens de erro e cujo valor é a mensagem de erro localizada. O ficheiro deve ser encontrado na App.LocalResources
pasta. Por exemplo, a chave é a chave e o seu valor numa mensagem de erro linguístico em francês localizado (fr):
Name | Valor |
---|---|
A classificação deve estar entre 1 e 10. | La nota doit être compreende entre 1 e 10. |
Além disso, a localização da anotação de dados é extensível. Os desenvolvedores podem ligar o seu próprio fornecedor de localização de cordas implementando a IStringLocalizerProvider interface para armazenar a cadeia de localização em algum lugar diferente de um ficheiro de recursos.
Suporte async com fornecedores de lojas do estado da sessão
ASP.NET agora permite que os métodos de retorno de tarefas sejam usados com fornecedores de lojas do estado da sessão, permitindo assim que ASP.NET aplicações obtenham os benefícios de escalabilidade da async. Para suportar operações assíncronos com fornecedores de lojas do Estado de sessão, ASP.NET inclui uma nova interface, System.Web.SessionState.ISessionStateModuleque herda IHttpModule e permite aos desenvolvedores implementar o seu próprio módulo de estado de sessão e fornecedores de lojas de assínios. 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 SessionStateUtility classe inclui dois novos métodos, IsSessionStateReadOnly e IsSessionStateRequiredque podem ser usados para suportar operações assíncronos.
Suporte async para fornecedores de cache de saída
A partir de .NET Framework 4.6.2, os métodos de retorno de tarefas podem ser utilizados com fornecedores de cache de saída para proporcionar os benefícios de escalabilidade da async. Os fornecedores que implementam estes métodos reduzem o bloqueio de fios num servidor web e melhoram a escalabilidade de um serviço de ASP.NET.
Foram adicionadas as seguintes APIs para apoiar os fornecedores assíncronos de cache de saída:
A System.Web.Caching.OutputCacheProviderAsync classe, que herda System.Web.Caching.OutputCacheProvider e permite que os desenvolvedores implementem um fornecedor assíncronos de cache de saída.
A OutputCacheUtility classe, que fornece métodos auxiliares para configurar a cache de saída.
18 novos métodos na System.Web.HttpCachePolicy classe. Estes incluemGetCacheability, GetCacheExtensions, GetETag, GetETagFromFileDependencies, GetMaxAgeGetMaxAgeGetNoTransformsGetNoStore, GetOmitVaryStar, , GetProxyMaxAge, GetRevalidation, , GetUtcLastModified, , GetVaryByCustom, HasSlidingExpiratione .IsValidUntilExpires
2 novos métodos na System.Web.HttpCacheVaryByContentEncodings classe: GetContentEncodings e SetContentEncodings.
2 novos métodos na System.Web.HttpCacheVaryByHeaders classe: GetHeaders e SetHeaders.
2 novos métodos na System.Web.HttpCacheVaryByParams classe: GetParams e SetParams.
System.Web.Caching.AggregateCacheDependency Na aula, o GetFileDependencies método.
CacheDependencyNo métodoGetFileDependencies.
Categorias de caracteres
Os caracteres em .NET Framework 4.6.2 são classificados com base no Unicode Standard, versão 8.0.0. Em .NET Framework 4.6 e .NET Framework 4.6.1, os caracteres foram classificados com base nas categorias de caracteres Unicode 6.3.
O suporte ao Unicode 8.0 limita-se à classificação dos caracteres pela CharUnicodeInfo classe e aos tipos e métodos que dele dependem. Estes incluem a StringInfo classe, o método sobrecarregadoChar.GetUnicodeCategory, e as classes de caracteres reconhecidas pelo .NET Framework motor de expressão regular. A comparação e classificação de caracteres e cordas não é afetada por esta alteração e continua a depender do sistema operativo subjacente ou, nos sistemas Windows 7, nos dados de caracteres fornecidos por .NET Framework.
Para alterações nas categorias de caracteres do Unicode 6.0 para Unicode 7.0, consulte o Unicode Standard, versão 7.0.0 no site do Unicode Consortium. Para alterações do Unicode 7.0 para Unicode 8.0, consulte o Unicode Standard, versão 8.0.0 no site do Unicode Consortium.
Criptografia
Suporte para certificados X509 contendo FIPS 186-3 DSA
.NET Framework 4.6.2 adiciona suporte para certificados DSA (Algoritmo de Assinatura Digital) X509 cujas teclas excedem o limite FIPS 186-2 1024 bits.
Além de suportar os tamanhos-chave maiores do FIPS 186-3, .NET Framework 4.6.2 permite a computação de assinaturas com a família SHA-2 de algoritmos de haxixe (SHA256, SHA384 e SHA512). O suporte FIPS 186-3 é fornecido pela nova System.Security.Cryptography.DSACng classe.
De acordo com as recentes alterações na RSA classe em .NET Framework 4.6 e a ECDsa classe em .NET Framework 4.6.1, a DSA classe base abstrata em .NET Framework 4.6.2 tem métodos adicionais para permitir que os chamadores utilizem esta funcionalidade sem casting. Pode ligar para o método de DSACertificateExtensions.GetDSAPrivateKey extensão para assinar dados, como mostra o exemplo a seguir.
public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPrivateKey())
{
return dsa.SignData(data, HashAlgorithmName.SHA384);
}
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
Using DSA As DSA = cert.GetDSAPrivateKey()
Return DSA.SignData(data, HashAlgorithmName.SHA384)
End Using
End Function
E pode ligar para o método de DSACertificateExtensions.GetDSAPublicKey extensão para verificar os dados assinados, como mostra o exemplo a seguir.
public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPublicKey())
{
return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
}
}
Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
Using dsa As DSA = cert.GetDSAPublicKey()
Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
End Using
End Function
Maior clareza das entradas nas principais rotinas de derivação da ECDiffieHellman
.NET Framework 3.5 apoio adicional para a Curva Elíptica Diffie-Hellman Acordo-Chave com três rotinas diferentes da Função de Derivação de Chaves (KDF). As entradas para as rotinas, e as próprias rotinas, foram configuradas através de propriedades no ECDiffieHellmanCng objeto. Mas como nem todas as rotinas liam todas as propriedades de entrada, havia espaço para confusão no passado do promotor.
Para abordar esta questão em .NET Framework 4.6.2, foram adicionados à classe base três ECDiffieHellman métodos para representar mais claramente estas rotinas KDF e as suas entradas:
Método ECDiffieHellman | Description |
---|---|
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) | Obtém material chave usando a fórmula HASH (|| secretos do Presidente x || SecretAppend) HASH (secretPrepend OrElse x OrElse secretAppend) onde x é o resultado calculado do algoritmo de Diffie-Hellman DA CE. |
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) | Obtém material chave usando a fórmula HMAC(hmacKey, || secretos doPrepend x || SecretAppend) HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend) onde x é o resultado calculado do algoritmo de Diffie-Hellman DA CE. |
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) | Obtém material chave usando o algoritmo de derivação da função pseudoaleatória TLS (PRF). |
Suporte para encriptação simétrica de chave persistente
A Windows biblioteca de criptografia (GNG) adicionou suporte para armazenar chaves simétricas persistentes e usar chaves simétricas armazenadas em hardware, e .NET Framework 4.6.2 permitiram aos desenvolvedores utilizar esta funcionalidade. Uma vez que a noção de nomes-chave e fornecedores-chave é específica da implementação, a utilização desta funcionalidade requer a utilização do construtor dos tipos de implementação concretos em vez da abordagem de fábrica preferida (como a chamada Aes.Create
).
Existe suporte de encriptação simétrica de teclas persistentes 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 assinado pelaXml para hashing SHA-2
.NET Framework 4.6.2 adiciona suporte à SignedXml classe para algoritmos de referência RSA-SHA256, RSA-SHA384 e RSA-SHA512 PKCS#1, e SHA256, SHA384 e SHA512 de referência digeridos.
As constantes URI estão todas expostas em SignedXml:
Campo AssinadoXml | 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" |
Quaisquer programas que tenham registado um manipulador CryptoConfig personalizado SignatureDescription para adicionar suporte a estes algoritmos continuarão a funcionar como no passado, mas como existem agora incumprimentos da plataforma, o CryptoConfig registo já não é necessário.
SqlClient
.NET Framework Data Provider for SQL Server (System.Data.SqlClient) inclui as seguintes novidades em .NET Framework 4.6.2:
Conecção de pooling e timeouts com bases de dados SQL do Azure
Quando a ligação está ativada e ocorre um tempo limite ou outro erro de login, uma exceção é em cache, e a exceção em cache é lançada em qualquer tentativa de ligação subsequente durante os próximos 5 segundos a 1 minuto. Para mais informações, consulte SQL Server Connection Pooling (ADO.NET).
Este comportamento não é desejável ao ligar-se a SQL do Azure Bases de Dados, uma vez que as tentativas de ligação podem falhar com erros transitórios que são normalmente recuperados rapidamente. Para melhor otimizar a experiência de relagem de ligação, o comportamento do período de bloqueio do pool de ligação é removido quando as ligações a SQL do Azure bases de dados falham.
A adição da nova PoolBlockingPeriod
palavra-chave permite-lhe selecionar o período de bloqueio mais adequado para a sua aplicação. Os valores incluem:
O período de bloqueio do pool de ligação para uma aplicação que se conecta a um Base de Dados SQL do Azure está desativado, e o período de bloqueio do pool de ligação para uma aplicação que se conecta a qualquer outra SQL Server instância está ativado. Este é o valor predefinido. Se o nome do ponto final do servidor terminar com qualquer um dos seguintes, são considerados SQL do Azure Bases de Dados:
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
O período de bloqueio da piscina de ligação está sempre ativado.
O período de bloqueio da piscina de ligação está sempre desativado.
Melhoramentos para Always Encrypted
SQLClient introduz duas melhorias para Always Encrypted:
Para melhorar o desempenho de consultas parametrizadas contra colunas de base de dados encriptadas, os metadados de encriptação para parâmetros de consulta estão agora em cache. Com a SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled propriedade definida para
true
(que é o valor padrão), se a mesma consulta for chamada várias vezes, o cliente recupera metadados de parâmetro do servidor apenas uma vez.As entradas das chaves de encriptação da coluna na cache da chave são agora despejadas após um intervalo de tempo configurável, definidas utilizando a SqlConnection.ColumnEncryptionKeyCacheTtl propriedade.
Fundação Windows comunicação
Em .NET Framework 4.6.2, Windows Fundação para a Comunicação foi reforçada nas seguintes áreas:
Suporte de segurança ao transporte da WCF para certificados armazenados com recurso a CNG
A segurança de transporte da WCF suporta certificados armazenados utilizando a biblioteca de criptografia Windows (CNG). Em .NET Framework 4.6.2, este suporte limita-se a utilizar certificados com uma chave pública que tenha um expoente não superior a 32 bits de comprimento. Quando uma aplicação tem como alvo .NET Framework 4.6.2, esta funcionalidade é por padrão.
Para aplicações que .NET Framework 4.6.1 e anterior, mas que estão a funcionar em .NET Framework 4.6.2, esta funcionalidade pode ser ativada adicionando a seguinte linha à <secção de tempo> de execução do ficheiro app.config ou web.config.
<AppContextSwitchOverrides
value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>
Isto também pode ser feito programáticamente com código como:
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 do horário de verão pela classe DataContractJsonSerializer
Os clientes podem utilizar uma configuração de aplicação para determinar se a DataContractJsonSerializer classe suporta várias regras de regulação para um único fuso horário. Esta é uma funcionalidade de opt-in. Para o ativar, adicione a seguinte definição ao seu ficheiro app.config:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>
Quando esta função está ativada, um DataContractJsonSerializer objeto utiliza o TimeZoneInfo tipo em vez do tipo para desseializar os TimeZone dados de data e hora. TimeZoneInfo suporta regras de ajustamento múltiplas, o que permite trabalhar com dados históricos do fuso horário; TimeZone não tem.
Para obter mais informações sobre a estrutura e os ajustes do TimeZoneInfo fuso horário, consulte a Visão Geral do Fuso Horário.
NetNamedPipeBining melhor jogo
O WCF tem uma nova configuração de aplicações que pode ser definida nas aplicações do cliente para garantir que se conectam sempre ao serviço de escuta no URI que melhor combina com a que solicitam. Com esta definição de aplicação definida para false
(o padrão), é possível que os clientes utilizem NetNamedPipeBinding para tentar ligar a um serviço que ouve um URI que é um substring do URI solicitado.
Por exemplo, um cliente tenta ligar-se a um serviço de escuta, net.pipe://localhost/Service1
mas um serviço diferente nessa máquina que funciona com privilégio de administrador está a ouvir em net.pipe://localhost
. Com esta definição de aplicação definida para false
, o cliente tentaria ligar-se ao serviço errado. Depois de configurar a definição da aplicação para true
, o cliente irá sempre ligar-se ao melhor serviço de correspondência.
Nota
Clientes que usam NetNamedPipeBinding serviços de encontrar com base no endereço base do serviço (se existir) em vez do endereço de ponto final completo. Para garantir que esta definição funcione sempre, o serviço deve utilizar um endereço base único.
Para ativar esta alteração, adicione a seguinte definição de aplicação ao ficheiro App.config ou Web.config da sua aplicação do cliente:
<configuration>
<appSettings>
<add key="wcf:useBestMatchNamedPipeUri" value="true" />
</appSettings>
</configuration>
SSL 3.0 não é um protocolo padrão
Ao utilizar o NetTcp com segurança de transporte e um tipo de certificado credencial, o SSL 3.0 deixou de ser um protocolo padrão utilizado para negociar uma ligação segura. Na maioria dos casos, não deverá haver impacto nas aplicações existentes, uma vez que o TLS 1.0 está incluído na lista de protocolos para o NetTcp. Todos os clientes existentes devem ser capazes de negociar uma ligação utilizando pelo menos TLS 1.0. Se o Ssl3 for necessário, utilize um dos seguintes mecanismos de configuração para adicioná-lo à lista de protocolos negociados.
A SslStreamSecurityBindingElement.SslProtocols propriedade
A TcpTransportSecurity.SslProtocols propriedade
A <secção sslStreamSecurity> da <secção de Configuração> personalizada
Windows Presentation Foundation (WPF)
Em .NET Framework 4.6.2, Windows Presentation Foundation foi reforçada nas seguintes áreas:
Triagem de grupo
Uma aplicação que usa um CollectionView objeto para agrupar dados pode agora declarar explicitamente como classificar os grupos. A triagem explícita aborda o problema da encomenda não intuitiva que ocorre quando uma aplicação adiciona ou remove grupos dinamicamente, ou quando altera o valor das propriedades dos itens envolvidos no agrupamento. Também pode melhorar o desempenho do processo de criação de grupo, movendo comparações das propriedades de agrupamento do tipo de coleção completa para o tipo de grupos.
Para apoiar a triagem do grupo, as novas GroupDescription.SortDescriptions e GroupDescription.CustomSort propriedades descrevem como separar a coleção de grupos produzidos pelo GroupDescription objeto. Isto é análogo à forma como as propriedades com o nome ListCollectionView idêntico descrevem como separar os itens de dados.
Duas novas propriedades estáticas da PropertyGroupDescription classe, CompareNameAscending e CompareNameDescending, pode ser usado para os casos mais comuns.
Por exemplo, os seguintes XAML agrupam dados por idade, classificam os grupos etários por ordem crescente e agrupam os itens dentro de cada faixa etária pelo apelido.
<GroupDescriptions>
<PropertyGroupDescription
PropertyName="Age"
CustomSort=
"{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
</PropertyGroupDescription>
</GroupDescriptions>
<SortDescriptions>
<SortDescription PropertyName="LastName"/>
</SortDescriptions>
Suporte ao teclado touch
O suporte ao teclado touch permite o rastreio de foco nas aplicações WPF invocando e descartando automaticamente o touch Keyboard em Windows 10 quando a entrada de toque é recebida por um controlo que pode ter uma entrada textual.
Em versões anteriores de .NET Framework, as aplicações WPF não podem optar pelo rastreio de foco sem desativar o suporte de gestos de caneta/toque WPF. Como resultado, as aplicações WPF devem escolher entre suporte total de toque WPF ou confiar na promoção Windows rato.
DPI por monitor
Para apoiar a recente proliferação de ambientes de alto DPI e híbrido-DPI para aplicações WPF, o WPF em .NET Framework 4.6.2 permite a sensibilização por monitor. Consulte as amostras e o guia do desenvolvedor no GitHub para obter mais informações sobre como permitir que a sua aplicação WPF se torne consciente do DPI por monitor.
Em versões anteriores de .NET Framework, as aplicações WPF estão cientes do sistema-DPI. Por outras palavras, o UI da aplicação é dimensionado pelo SO conforme apropriado, dependendo do DPI do monitor em que a aplicação é renderizada.
Para aplicações executadas sob .NET Framework 4.6.2, pode desativar as alterações de DPI por monitor nas aplicações WPF, adicionando uma declaração de configuração à <secção de tempo> de execução do seu ficheiro de configuração da aplicação, da seguinte forma:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>
Windows Workflow Foundation (WF)
Em .NET Framework 4.6.2, Windows Workflow Foundation foi reforçada na seguinte área:
Suporte para expressões C# e IntelliSense no Rehosted WF Designer
Começando com .NET Framework 4.5, wF suporta expressões C# tanto no Visual Studio Designer como em fluxos de trabalho de código. O Rehosted Workflow Designer é uma característica chave do WF que permite que o Workflow Designer esteja numa aplicação fora Visual Studio (por exemplo, em WPF). Windows Workflow Foundation oferece a capacidade de suportar expressões C# e IntelliSense no Rehosted Workflow Designer. Para mais informações, consulte o blog Windows Workflow Foundation.
Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio
Nas versões do .NET Framework antes de 4.6.2, o WF Designer IntelliSense é quebrado quando um cliente reconstrói um projeto de workflow a partir de Visual Studio. Embora a construção do projeto seja bem sucedida, os tipos de fluxo de trabalho não são encontrados no designer, e os avisos do IntelliSense para os tipos de fluxo de trabalho em falta aparecem na janela Error List . .NET Framework 4.6.2 aborda esta questão e disponibiliza o IntelliSense.
Aplicações V1 de fluxo de trabalho com rastreio de fluxo de trabalho agora executado em modo FIPS
As máquinas com modo de conformidade FIPS ativado podem agora executar com sucesso uma aplicação estilo workflow Version 1 com o rastreio do fluxo de trabalho ligado. Para ativar este cenário, tem de fazer a seguinte alteração no seu ficheiro app.config:
<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />
Se este cenário não for ativado, executar a aplicação continua a gerar uma exceção com a mensagem: "Esta implementação não faz parte do Windows plataforma fips validado algoritmos criptográficos."
Melhorias no fluxo de trabalho ao utilizar a Atualização Dinâmica com Visual Studio Designer de Fluxo de Trabalho
O Workflow Designer, FlowChart Activity Designer e outros Designers de Atividades de Fluxo de Trabalho carregam e exibem com sucesso fluxos de trabalho que foram salvos após chamar o DynamicUpdateServices.PrepareForUpdate método. Nas versões do .NET Framework antes de .NET Framework 4.6.2, o carregamento de um ficheiro XAML em Visual Studio para um fluxo de trabalho que tenha sido guardado após a chamada DynamicUpdateServices.PrepareForUpdate pode resultar nos seguintes problemas:
O Workflow Designer não consegue carregar corretamente o ficheiro XAML (quando o ViewStateData.Id está no fim da linha).
Flowchart Activity Designer ou outros Designers de Atividade de Fluxo de Trabalho podem exibir todos os objetos nos seus locais padrão em oposição aos valores de propriedade anexados.
ClickOnce
ClickOnce foi atualizado para apoiar os TLS 1.1 e TLS 1.2, além do protocolo 1.0, que já suporta. ClickOnce deteta automaticamente qual o protocolo necessário; não são necessários passos adicionais dentro da ClickOnce aplicação para permitir o suporte TLS 1.1 e 1.2.
Conversão de aplicativos de Windows Forms e WPF para apps UWP
Windows agora oferece capacidades para levar as aplicações de Windows existentes para desktop, incluindo as aplicações WPF e Windows Forms, para o Plataforma Universal do Windows (UWP). Esta tecnologia funciona como uma ponte, permitindo-lhe migrar gradualmente a sua base de código existente para a UWP, trazendo assim a sua app para todos os dispositivos Windows 10.
As aplicações de desktop convertidas ganham uma identidade de aplicação semelhante à identidade da aplicação de aplicações UWP, o que torna as APIs UWP acessíveis para permitir funcionalidades como o Live Tiles e notificações. A aplicação continua a comportar-se como antes e funciona como uma aplicação de confiança completa. Uma vez que a aplicação é convertida, um processo de contentor de aplicação pode ser adicionado ao processo de confiança total existente para adicionar uma interface de utilizador adaptativa. Quando toda a funcionalidade é transferida para o processo de contentores 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.
Depurando melhorias
A API de depurado não gerido foi reforçada em .NET Framework 4.6.2 para efetuar uma análise adicional quando uma NullReferenceException é lançada de modo a que seja possível determinar qual é null
a variável numa única linha de código fonte . Para apoiar este cenário, as seguintes APIs foram adicionadas à API desorçada não-gerido.
As interfaces ICorDebugCode4, ICorDebugVariableHome e ICorDebugVariableHomeEnum , que expõem as casas nativas de variáveis geridas. Isto permite que os depurados façam alguma análise de fluxo de código quando ocorre NullReferenceException e trabalhem para trás para determinar a variável gerida que corresponde à localização nativa que foi
null
.O método ICorDebugType2:::GetTypeID fornece um mapeamento para iCorDebugType para COR_TYPEID, que permite ao depurado obter uma COR_TYPEID sem um exemplo do ICorDebugType. As APIs existentes em COR_TYPEID podem então ser usadas para determinar o layout de classe do tipo.
Novidades em .NET Framework 4.6.1
.NET Framework 4.6.1 inclui novas funcionalidades nas seguintes áreas:
Para mais informações sobre .NET Framework 4.6.1, consulte os seguintes tópicos:
.NET Framework DPI (em GitHub)
Criptografia: Suporte para certificados X509 contendo ECDSA
.NET Framework 4.6 acrescentou suporte RSACng para certificados X509. .NET Framework 4.6.1 adiciona suporte para certificados X509 da ECDSA (Algoritmo de Assinatura Digital Curva Elíptica) X509.
O ECDSA oferece um melhor desempenho e é um algoritmo de criptografia mais seguro do que o RSA, proporcionando uma excelente escolha onde o desempenho e escalabilidade da Segurança da Camada de Transporte (TLS) é uma preocupação. A implementação .NET Framework envolve a funcionalidade Windows existente.
O seguinte código de exemplo mostra como é fácil gerar uma assinatura para um byte stream utilizando o novo suporte para certificados ECDSA X509 incluídos em .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 em .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
Foram acrescentados aos ADO.NET:
Always Encrypted suporte para chaves protegidas de hardware
ADO.NET suporta agora armazenar chaves principais de colunas Always Encrypted de forma nativa em Módulos de Segurança de Hardware (HSMs). Com este suporte, os clientes podem aproveitar as teclas assimétricas armazenadas em HSMs sem terem de escrever fornecedores de lojas de chaves de coluna personalizadas e registrá-las em aplicações.
Os clientes precisam de instalar o fornecedor CSP fornecido pelo fornecedor HSM ou os fornecedores de lojas CNG nos servidores de aplicações ou computadores clientes, a fim de aceder a Always Encrypted dados protegidos com chaves principais de colunas armazenadas num HSM.
Melhor comportamento de MultiSubnetFailover ligação para a AlwaysOn
A SqlClient fornece agora automaticamente ligações mais rápidas a um Grupo de Disponibilidade AlwaysOn (AG). Deteta de forma transparente se a sua aplicação está a ligar-se a um grupo de disponibilidades AlwaysOn (AG) numa sub-rede diferente e descobre rapidamente o servidor ativo atual e fornece uma ligação ao servidor. Antes desta versão, uma aplicação teve de definir o fio de ligação para incluir "MultisubnetFailover=true"
para indicar que estava a ligar-se a um Grupo de Disponibilidade AlwaysOn. Sem definir a palavra-chave de ligação para true
, uma aplicação pode experimentar um tempo limite enquanto se conecta a um Grupo de Disponibilidade AlwaysOn. Com esta versão, uma aplicação já não precisa de ser true
definidaMultiSubnetFailover. Para obter mais informações sobre o suporte sqlClient para grupos de disponibilidade sempre, consulte SqlClient Support for High Availability, Disaster Recovery.
Windows Presentation Foundation (WPF)
Windows Presentation Foundation inclui uma série de melhorias e alterações.
Melhor desempenho
O atraso nos eventos de toque de disparo foi fixado em .NET Framework 4.6.1. Além disso, escrever num RichTextBox controlo já não liga o fio de renderização durante a entrada rápida.
Melhorias de verificação ortográfica
O verificador de feitiços no WPF foi atualizado em Windows 8.1 e versões posteriores para alavancar o suporte do sistema operativo para verificar idiomas adicionais. Não existe qualquer alteração na funcionalidade nas versões Windows antes de Windows 8.1.
Tal como nas versões anteriores de .NET Framework, o idioma para um TextBox controlo ou um RichTextBox bloco é detetado procurando informações na seguinte ordem:
xml:lang
, se estiver presente.Linguagem de entrada atual.
Cultura atual.
Para obter mais informações sobre suporte linguístico no WPF, consulte a publicação de blogue do WPF no .NET Framework funcionalidades 4.6.1.
Suporte adicional para dicionários personalizados por utilizador
Em .NET Framework 4.6.1, o WPF reconhece dicionários personalizados que são registados globalmente. Esta capacidade está disponível para além da capacidade de registrá-los por controlo.
Em versões anteriores do WPF, os dicionários personalizados não reconheciam palavras excluídas e listas de Correção Automática. São apoiados em Windows 8.1 e Windows 10 através da utilização de ficheiros que podem ser colocados sob o %AppData%\Microsoft\Spelling\<language tag>
diretório. Aplicam-se as seguintes regras a estes ficheiros:
Os ficheiros devem ter extensões de .dic (para palavras adicionadas), .exc (para palavras excluídas) ou .acl (para Correção Automática).
Os ficheiros devem ser utf-16 LE plaintext que começa com a Marca byte Order (BOM).
Cada linha deve consistir numa palavra (nas listas de palavras adicionadas e excluídas) ou num par de correção automática com as palavras separadas por uma barra vertical ("|") (na lista de palavras Decorrecte Automático).
Estes ficheiros são considerados apenas de leitura e não são modificados pelo sistema.
Nota
Estes novos formatos de ficheiros não são suportados diretamente pelas APIs de verificação ortográfica do WPF, e os dicionários personalizados fornecidos ao WPF em aplicações devem continuar a utilizar ficheiros .lex.
Amostras
Existem várias amostras de WPF no repositório microsoft/WPF-Samples GitHub. Ajude-nos a melhorar as nossas amostras enviando-nos um pedido de retirada ou abrindo um problema de GitHub.
Extensões DirectX
O WPF inclui um pacote NuGet que fornece novas implementações D3DImage que facilitam a interoperação com o conteúdo DX10 e Dx11. O código para este pacote foi de origem aberta e está disponível no GitHub.
Fundação Windows Workflow: Transações
O Transaction.EnlistPromotableSinglePhase método pode agora utilizar um gestor de transações distribuído que não o MSDTC para promover a transação. Fá-lo especificando um identificador de transações GUID para a nova Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) sobrecarga. Se esta operação for bem sucedida, existem limitações colocadas nas capacidades da transação. Uma vez alistado um promotor de transações não-MSDTC, os seguintes métodos lançam um TransactionPromotionException porque estes métodos requerem promoção à MSDTC:
Uma vez alistado um promotor de transações não-MSDTC, este deve ser utilizado para futuras alistações duradouras utilizando protocolos que define. O Guid promotor de transações pode ser obtido utilizando o PromoterType imóvel. Quando a transação promove, o promotor de transações fornece um Byte conjunto que representa o símbolo promovido. Uma aplicação pode obter o símbolo promovido para uma transação não promovida por MSDTC com o GetPromotedToken método.
Os utilizadores da nova Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) sobrecarga devem seguir uma sequência de chamadas específica para que a operação de promoção seja concluída com sucesso. Estas regras estão documentadas na documentação do método.
Criação de perfis
A API de perfil não gerido foi reforçada da seguinte forma:
Melhor suporte para aceder a PDBs na interface ICorProfilerInfo7 .
Em ASP.NET Core, torna-se muito mais comum que as assembleias sejam compiladas em memória por Roslyn. Para os desenvolvedores que fazem ferramentas de perfis, isto significa que os PDBs que historicamente foram serializados no disco podem já não estar presentes. As ferramentas do profiler usam frequentemente PDBs para mapear código de volta para linhas de origem para tarefas como cobertura de código ou análise de desempenho line-by-line. A interface ICorProfilerInfo7 inclui agora dois novos métodos, ICorProfilerInfo7::GetInMemorySymbolsLength e ICorProfilerInfo7::ReadInMemorySymbols, para fornecer a estas ferramentas de perfis o acesso aos dados PDB na memória, utilizando as novas APIs, um profiler pode obter o conteúdo de um PDB na memória como um byte array e, em seguida, processá-lo ou processá-lo em série para.
Melhor instrumentação com a interface ICorProfiler.
Os perfis que estão a usar a
ICorProfiler
funcionalidade APIs ReJit para instrumentação dinâmica podem agora modificar alguns metadados. Anteriormente, tais ferramentas poderiam instrumentá-lo IL a qualquer momento, mas os metadados só podiam ser modificados no tempo de carga do módulo. Como o IL se refere aos metadados, isto limitava os tipos de instrumentação que poderiam ser feitos. Levantamos alguns desses limites adicionando o método ICorProfilerInfo7::ApplyMetaData para suportar um subconjunto de edições de metadados após as cargas do módulo, nomeadamente adicionando novosAssemblyRef
,TypeRef
TypeSpec
, eMemberRef
MemberSpec
UserString
registos. Esta alteração torna possível uma gama muito mais ampla de instrumentação on-the-fly.
PDBs do gerador de imagem nativo (NGEN)
O rastreio de eventos cross-machine permite que os clientes perfilem um programa na Máquina A e olhem para os dados de perfis com mapeamento de linha de origem na Máquina B. Utilizando versões anteriores de .NET Framework, o utilizador copiaria todos os módulos e imagens nativas da máquina perfilada para a máquina de análise que contém o IL PDB para criar o mapeamento de origem-nativa. Embora este processo possa funcionar bem quando os ficheiros são relativamente pequenos, como é o caso das aplicações telefónicas, os ficheiros podem ser muito grandes nos sistemas de desktop e requerem um tempo significativo para copiar.
Com PDBs Ngen, ngen pode criar um PDB que contém o mapeamento IL-to-native sem uma dependência do IL PDB. No nosso cenário de rastreio de eventos cross-machine, tudo o que é necessário é copiar a imagem nativa PDB que é gerada pela Máquina A para a Máquina B e usar APIs de Acesso à Interface de Debug para ler o mapeamento fonte-a-IL do IL EB e o mapeamento IL-to-native da imagem nativa do PDB. A combinação de ambos os mapeamentos fornece um mapeamento de origem-nativa. Uma vez que a imagem nativa PDB é 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 em .NET 2015
.NET 2015 introduz .NET Framework 4.6 e .NET Core. Algumas novas funcionalidades aplicam-se a ambas, e outras características são específicas para .NET Framework 4.6 ou .NET Core.
ASP.NET Core
.NET 2015 inclui ASP.NET Core, que é uma implementação lean .NET para a construção de aplicações modernas baseadas em nuvem. ASP.NET Core é modular para que possa incluir apenas as funcionalidades que são necessárias na sua aplicação. Pode ser hospedado no IIS ou auto-hospedado num processo personalizado, e pode executar aplicações com diferentes versões do .NET Framework no mesmo servidor. Inclui um novo sistema de configuração ambiental que é projetado para a implementação de nuvens.
MVC, Web API e Web Pages são unificados numa única estrutura chamada MVC 6. Você constrói aplicativos ASP.NET Core através de ferramentas em Visual Studio 2015 ou mais tarde. As aplicações existentes funcionarão no novo .NET Framework; no entanto, para construir uma app que utilize OVC 6 ou SignalR 3, terá de utilizar o sistema de projeto em Visual Studio 2015 ou mais tarde.
Para obter informações, consulte ASP.NET Core.
Atualizações ASP.NET
API baseada em tarefas para flushing de resposta assíncrono
ASP.NET agora fornece uma API baseada em tarefas simples para o flushing de resposta assíncrono, HttpResponse.FlushAsyncque permite que as respostas sejam lavadas assíncrono usando o suporte da
async/await
sua língua.A ligação do modelo suporta métodos de retorno de tarefas
Em .NET Framework 4.5, ASP.NET adicionou a funcionalidade Model Binding que permitiu uma abordagem extensível e focada em código às operações de dados baseadas em CRUD em páginas Web Forms e controlos de utilizadores. O sistema de ligação do modelo suporta agora métodos Taskde ligação do modelo de retorno. Esta funcionalidade permite que Web Forms desenvolvedores obtenham os benefícios de escalabilidade da async com a facilidade do sistema de ligação de dados ao utilizar versões mais recentes de ORMs, incluindo o Quadro de Entidades.
A ligação do modelo async é controlada pela definição de
aspnet:EnableAsyncModelBinding
configuração.<appSettings> <add key=" aspnet:EnableAsyncModelBinding" value="true|false" /> </appSettings>
Nas aplicações o alvo .NET Framework 4.6, é padrão para
true
. Nas aplicações em execução no .NET Framework 4.6 que visam uma versão anterior de .NET Framework, éfalse
por padrão. Pode ser ativado definindo a definição de configuração paratrue
.Suporte HTTP/2 (Windows 10)
HTTP/2 é uma nova versão do protocolo HTTP que proporciona uma utilização muito melhor da ligação (menos viagens de ida e volta entre cliente e servidor), resultando num menor carregamento de páginas web de latência para os utilizadores. As páginas web (em oposição aos serviços) são as que mais beneficiam de HTTP/2, uma vez que o protocolo otimiza para vários artefactos sendo solicitados como parte de uma única experiência. O suporte HTTP/2 foi adicionado à ASP.NET em .NET Framework 4.6. Como existe funcionalidade de networking em várias camadas, foram necessárias novas funcionalidades em Windows, no IIS e em ASP.NET para ativar HTTP/2. Deve estar a funcionar a Windows 10 para utilizar HTTP/2 com ASP.NET.
HTTP/2 também é suportado e por padrão para aplicações Windows 10 Plataforma Universal do Windows (UWP) que usam a System.Net.Http.HttpClient API.
De forma a fornecer uma forma de utilizar a funcionalidade PUSH_PROMISE em aplicações ASP.NET, um novo método com duas sobrecargas, PushPromise(String) e PushPromise(String, String, NameValueCollection), foi adicionado à HttpResponse classe.
Nota
Embora ASP.NET Core suporte HTTP/2, o suporte para a função PUSH PROMISE ainda não foi adicionado.
O navegador e o servidor web (IIS on Windows) fazem todo o trabalho. Não tens de fazer levantamentos pesados para os teus utilizadores.
A maioria dos principais navegadores suportam HTTP/2, pelo que é provável que os seus utilizadores beneficiem do suporte HTTP/2 se o seu servidor o suportar.
Apoio ao Protocolo vinculativo token
A Microsoft e a Google têm vindo a colaborar numa nova abordagem à autenticação, chamada "Token Binding Protocol". A premissa é que os tokens de autenticação (na cache do seu navegador) podem ser roubados e usados por criminosos para aceder a recursos seguros de outra forma (por exemplo, a sua conta bancária) sem exigir a sua senha ou qualquer outro conhecimento privilegiado. O novo protocolo visa mitigar este problema.
O Protocolo de Ligação Token será implementado em Windows 10 como uma funcionalidade de navegador. ASP.NET aplicações 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 haxixe de corda aleatório
.NET Framework 4.5 introduziu um algoritmo de haxixe de corda aleatório. No entanto, não foi apoiado por ASP.NET devido a algumas características ASP.NET dependiam de um código hash estável. Em .NET Framework 4.6, algoritmos de hash de corda aleatórios são agora suportados. Para ativar esta função, utilize a
aspnet:UseRandomizedStringHashAlgorithm
definição config.<appSettings> <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" /> </appSettings>
ADO.NET
A ADO .NET suporta agora a funcionalidade Always Encrypted disponível em SQL Server 2016. Com Always Encrypted, SQL Server pode realizar operações em dados encriptados, e o melhor de tudo é que a chave de encriptação reside na aplicação dentro do ambiente de confiança do cliente e não no servidor. Always Encrypted protege os dados dos clientes para que os DBAs não tenham acesso a dados de texto simples. A encriptação e desencriptação de dados ocorre de forma transparente ao nível do condutor, minimizando as alterações que têm de ser feitas às aplicações existentes. Para mais informações, consulte Always Encrypted (Motor de Base de Dados) e Always Encrypted (desenvolvimento do cliente).
Compilador JIT de 64 bits para código gerido
.NET Framework 4.6 apresenta uma nova versão do compilador JIT de 64 bits (originalmente chamado RyuJIT). O novo compilador de 64 bits proporciona melhorias significativas no desempenho ao longo do compilador JIT de 64 bits mais antigo. O novo compilador de 64 bits está ativado para processos de 64 bits em execução em cima de .NET Framework 4.6. A sua aplicação será executada num processo de 64 bits se for compilada como 64 bits ou AnyCPU e estiver a funcionar num sistema operativo de 64 bits. Embora tenha sido tomado o cuidado de tornar a transição para o novo compilador o mais transparente possível, as mudanças de comportamento são possíveis.
O novo compilador JIT de 64 bits também inclui funcionalidades de aceleração simd de hardware quando associados a tipos ativados por SIMD no espaço de nomes, o System.Numerics que pode produzir boas melhorias de desempenho.
Melhorias do carregador de montagem
O carregador de montagem utiliza agora a memória de forma mais eficiente descarregando conjuntos IL depois de uma imagem NGEN correspondente ser carregada. Esta alteração diminui a memória virtual, o que é particularmente benéfico para grandes aplicações de 32 bits (como Visual Studio), e também salva a memória física.
Mudanças na biblioteca da classe base
Muitas novas APIs foram adicionadas em torno de .NET Framework 4.6 para permitir cenários-chave. Estas incluem as seguintes alterações e adições:
Implementações iReadOnlyCollectionT<>
As coleções adicionais implementam IReadOnlyCollection<T> tais como Queue<T> e Stack<T>.
CulturaInfo.CurrentCulture and CultureInfo.CurrentUICulture
As CultureInfo.CurrentCulture propriedades e CultureInfo.CurrentUICulture propriedades são agora ler-escrever em vez de apenas ler. Se atribuir um novo CultureInfo objeto a estas propriedades, a cultura de fio atual definida pela
Thread.CurrentThread.CurrentCulture
propriedade e a cultura atual do fio UI definida pelasThread.CurrentThread.CurrentUICulture
propriedades também mudam.Melhoramentos à recolha de lixo (GC)
A GC aula agora inclui TryStartNoGCRegion e EndNoGCRegion métodos que lhe permitem a recolha de lixo durante a execução de um caminho crítico.
Uma nova sobrecarga do GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) método permite-lhe controlar se tanto a pilha de objetos pequenos como a pilha de objetos grandes são varridas e compactadas ou varridas apenas.
Tipos ativados por SIMD
O System.Numerics espaço de nomes inclui agora uma série de tipos ativados por SIMD, tais comoMatrix3x2, Matrix4x4Plane, , Quaternion, Vector2, , Vector3e Vector4.
Como o novo compilador JIT de 64 bits também inclui funcionalidades de aceleração simd de hardware, existem melhorias de desempenho especialmente significativas ao utilizar os tipos ativados pelo SIMD com o novo compilador JIT de 64 bits.
Atualizações de criptografia
A System.Security.Cryptography API está a ser atualizada para apoiar as APP de criptografia Windows. Versões anteriores do .NET Framework basearam-se inteiramente numa versão anterior das APIs de Criptografia Windows como base para a System.Security.Cryptography implementação. Temos tido pedidos de apoio à API da CNG, uma vez que suporta algoritmos de criptografia modernos, que são importantes para certas categorias de apps.
.NET Framework 4.6 inclui as seguintes novas melhorias para apoiar as APS de criptografia Windows CNG:
Um conjunto de métodos de extensão para certificados
System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)
X509 eSystem.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2)
que devolvem uma implementação baseada em CNG em vez de uma implementação baseada em CAPI, quando possível. (Alguns smartcards, etc., ainda requerem CAPI, e as APIs manuseiam o recuo).A System.Security.Cryptography.RSACng classe, que fornece uma implementação de CNG do algoritmo RSA.
Melhorias à RSA API para que as ações comuns não exijam mais castings. Por exemplo, encriptar dados usando um X509Certificate2 objeto requer código como o seguinte em versões anteriores de .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 em .NET Framework 4.6 pode ser reescrito da seguinte forma para evitar o elenco.
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 horários de ou para o tempo Unix
Foram adicionados à estrutura os seguintes novos métodos para apoiar a DateTimeOffset conversão de valores de data e hora para ou a partir do tempo Unix:
Interruptores de compatibilidade
A AppContext classe adiciona uma nova funcionalidade de compatibilidade que permite aos escritores de bibliotecas fornecer um mecanismo uniforme de opt-out para novas funcionalidades para os seus utilizadores. Estabelece um contrato de acopliamento pouco acoplado entre componentes, a fim de comunicar um pedido de opt-out. Esta capacidade é normalmente importante quando uma mudança é feita para a funcionalidade existente. Inversamente, já existe uma im opt-in implícita para novas funcionalidades.
Com AppContext, as bibliotecas definem e expõem os interruptores de compatibilidade, enquanto o código que deles depende pode definir esses interruptores para afetar o comportamento da biblioteca. Por padrão, as bibliotecas fornecem a nova funcionalidade, e apenas a alteram (isto é, fornecem a funcionalidade anterior) se o interruptor estiver definido.
Uma aplicação (ou uma biblioteca) pode declarar o valor de um comutador (que é sempre um Boolean valor) que uma biblioteca dependente define. O interruptor está sempre implícito
false
. Configurar o interruptor paratrue
o ativar. Configurar explicitamente o interruptor parafalse
fornecer 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 adequadamente 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 comutadores, uma vez que são um contrato formal exposto por uma biblioteca. Seguem-se dois formatos óbvios.
A troca. espaço de nome. nome comutador
A troca. biblioteca. nome comutador
Alterações ao padrão assíncronos baseado em tarefas (TAP)
Para apps que visam .NET Framework 4.6, Task e Task<TResult> objetos herdam a cultura e a cultura ui do fio de chamada. O comportamento de apps que visam versões anteriores de .NET Framework, ou que não visam uma versão específica de .NET Framework, não é afetado. Para mais informações, consulte a secção "Cultura e operações assíncronos baseadas em tarefas" do tema da CultureInfo classe.
A System.Threading.AsyncLocal<T> classe permite-lhe representar dados ambientes que são locais para um determinado fluxo de controlo assíncronos, como um
async
método. Pode ser usado para persistir dados através de fios. Também pode definir um método de retorno que é notificado sempre que os dados ambientais mudam, quer porque a AsyncLocal<T>.Value propriedade foi explicitamente alterada, quer porque o fio encontrou uma transição de contexto.Três métodos Task.CompletedTaskde conveniência, Task.FromCancelede Task.FromExceptionforam adicionados ao padrão assíncrona de tarefas (TAP) para devolver tarefas concluídas num determinado estado.
A NamedPipeClientStream classe agora suporta comunicação assíncronea com a sua nova ConnectAsync. método.
EventSource agora suporta a escrita para o registo do Evento
Agora pode utilizar a EventSource classe para registar mensagens administrativas ou operacionais no registo do evento, além de quaisquer sessões ETW existentes criadas na máquina. No passado, teve de utilizar o pacote Microsoft.Diagnostics.Tracing.EventSource NuGet para esta funcionalidade. Esta funcionalidade encontra-se agora integrada .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 ricas
Permite que classes e matrizes especialmente atribuídas, bem como tipos primitivos sejam passados como uma carga útil
Rastreio de atividade
Causas Eventos de Início e Paragem para marcar eventos entre eles com um ID que representa todas as atividades atualmente ativas.
Para suportar estas funcionalidades, o método sobrecarregado Write foi adicionado à EventSource classe.
Windows Presentation Foundation (WPF)
Melhorias do HDPI
O apoio do HDPI no WPF é agora melhor em .NET Framework 4.6. Foram introduzidas alterações no arredondamento de layout para reduzir os casos de recortes nos controlos com fronteiras. Por predefinição, esta funcionalidade só está ativada se a sua TargetFrameworkAttribute .NET Framework 4.6. As aplicações que visam versões anteriores do quadro, mas que estão em execução no .NET Framework 4.6 podem optar pelo novo comportamento adicionando a seguinte linha à <secção de tempo> de execução do ficheiro app.config:
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />
As janelas WPF que enrolam vários monitores com diferentes definições de DPI (configuração Multi-DPI) são agora completamente renderizadas sem regiões es apagadas. Pode optar por não este comportamento adicionando a seguinte linha à
<appSettings>
secção do ficheiro app.config para desativar este novo comportamento:<add key="EnableMultiMonitorDisplayClipping" value="true"/>
Foi adicionado suporte para carregar automaticamente o cursor certo com base na definição de DPI .System.Windows.Input.Cursor
O toque é melhor.
Os relatórios dos clientes sobre Ligação que o toque produz comportamentos imprevisíveis foram abordados em .NET Framework 4.6. O limiar de toque duplo para aplicações Windows Store e aplicações WPF é agora o mesmo em Windows 8.1 e acima.
Suporte transparente da janela da criança
O WPF em .NET Framework 4.6 suporta janelas de crianças transparentes em Windows 8.1 e superior. Isto permite-lhe criar janelas para crianças não retangulares e transparentes nas suas janelas de nível superior. Pode ativar esta funcionalidade definindo a HwndSourceParameters.UsesPerPixelTransparency propriedade para
true
.
Windows Communication Foundation (WCF)
Suporte SSL
A WCF suporta agora a versão SSL TLS 1.1 e TLS 1.2, além de SSL 3.0 e TLS 1.0, quando utilizar o NetTcp com segurança de transporte e autenticação do cliente. Agora é possível selecionar qual o protocolo a utilizar ou desativar protocolos de segurança inferior. Isto pode ser feito quer definindo a SslProtocols propriedade, quer adicionando o seguinte a um ficheiro 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>
Envio de mensagens utilizando diferentes ligações HTTP
O WCF permite agora que os utilizadores garantam que determinadas mensagens são enviadas utilizando diferentes ligações HTTP subjacentes. Há duas maneiras de fazer isto:
Usando um prefixo de nome de grupo de ligação
Os utilizadores podem especificar uma cadeia que o WCF utilizará como prefixo para o nome do grupo de ligação. São enviadas duas mensagens com prefixos diferentes utilizando diferentes ligações HTTP subjacentes. Você define o prefixo adicionando um par de chave/valor à propriedade da Message.Properties mensagem. A chave é "HttpTransportConnectionGroupNamePrefix"; o valor é o prefixo desejado.
Usando diferentes fábricas de canais
Os utilizadores também podem ativar uma funcionalidade que garanta que as mensagens enviadas através de canais criados por diferentes fábricas de canais utilizarão diferentes ligações HTTP subjacentes. Para ativar esta funcionalidade, os utilizadores devem definir o seguinte
appSetting
paratrue
:<appSettings> <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" /> </appSettings>
Windows Workflow Foundation (WWF)
Pode agora especificar o número de segundos que um serviço de fluxo de trabalho irá manter um pedido de operação fora de encomenda quando houver um marcador pendente de "não protocolo" antes de cronometrar o pedido. Um marcador "não-protocolo" é um marcador que não está relacionado com atividades pendentes de Receber. Algumas atividades criam marcadores não-protocolos no âmbito da sua implementação, pelo que pode não ser óbvio que exista um marcador não-protocolo. Estes incluem State and Pick. Por isso, se tiver um serviço de fluxo de trabalho implementado com uma máquina estatal ou contendo uma atividade Pick, provavelmente terá marcadores não-protocolos. Especifica o intervalo adicionando uma linha como a seguinte à
appSettings
secção do seu ficheiro app.config:<add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>
O valor predefinido é de 60 segundos. Se
value
for definido para 0, os pedidos fora de encomenda são imediatamente rejeitados com uma falha com texto que se parece com este:Operation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.
Esta é a mesma mensagem que recebe se uma mensagem de operação fora de ordem for recebida e não existirem marcadores não-protocolos.
Se o valor do
FilterResumeTimeoutInSeconds
elemento não for zero, existem marcadores não-protocolos e o intervalo expira, a operação falha com uma mensagem de tempo.Transações
Pode agora incluir o identificador de transações distribuído para a transação que causou uma exceção derivada de TransactionException ser lançada. Faça-o adicionando a seguinte chave à secção do
appSettings
seu ficheiro app.config:<add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>
O valor predefinido é
false
.Redes
Reutilização da tomada
Windows 10 inclui um novo algoritmo de rede de alta escalabilidade que faz melhor uso dos recursos das máquinas reutilizando portas locais para ligações TCP de saída. .NET Framework 4.6 suporta o novo algoritmo, permitindo que as aplicações .NET tirem partido do novo comportamento. Em versões anteriores de Windows, havia um limite de ligação artificial simultâneo (tipicamente 16.384, o tamanho padrão da gama portuária dinâmica), que poderia limitar a escalabilidade de um serviço causando exaustão portuária quando em carga.
Em .NET Framework 4.6, foram adicionadas duas APIs para permitir a reutilização da porta, o que elimina efetivamente o limite de 64 KB nas ligações simultâneas:
O System.Net.Sockets.SocketOptionName valor da enumeração.
A ServicePointManager.ReusePort propriedade.
Por predefinição, a ServicePointManager.ReusePort propriedade é
false
a menos que oHWRPortReuseOnSocketBind
HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
valor da chave de registo esteja definido para 0x1. Para permitir a reutilização da porta local nas ligações HTTP, deite a ServicePointManager.ReusePort propriedade atrue
. Isto faz com que todas as ligações de tomadas TCP de HttpClient saída e HttpWebRequest utilizem uma nova opção de tomada Windows 10, SO_REUSE_UNICASTPORT, que permite a reutilização da porta local.Os desenvolvedores que escrevem uma aplicação apenas para tomadas podem especificar a opção System.Net.Sockets.SocketOptionName ao chamar um método, de Socket.SetSocketOption modo a que as tomadas de saída reutilizam as portas locais durante a ligação.
Suporte para nomes de domínio internacional e PunyCode
Uma nova propriedade, IdnHostfoi adicionada à Uri classe para melhor suportar nomes de domínio internacionais e PunyCode.
Redimensionamento em controlos Windows Forms.
Esta função foi expandida em .NET Framework 4.6 para incluir o DomainUpDown, DataGridViewComboBoxColumnNumericUpDown, e ToolStripSplitButtonDataGridViewColumn tipos e o retângulo especificado pela propriedade utilizada ao Bounds desenhar um UITypeEditor.
Esta é uma funcionalidade de opt-in. Para o ativar, desave o
EnableWindowsFormsHighDpiAutoResizing
elemento paratrue
o ficheiro de configuração de aplicação (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 padrão fornece suporte limitado para codificações de páginas de código. Pode adicionar suporte para codificações de páginas de código disponíveis em .NET Framework mas não suportados em .NET Core, registando codificações de página de código com o Encoding.RegisterProvider método. Para obter mais informações, consulte System.Text.CodePagesEncodingProvider.
.NET Native
Plataforma Universal do Windows aplicações (UWP) que estão 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 obter mais informações, consulte compilar apps com .NET Native. Para uma visão geral do .NET Native que examina como difere tanto da compilação JIT como do NGEN e do que isso significa para o seu código, consulte .NET Native e Compilação.
As suas aplicações são compiladas por defeito para código nativo quando as compila com Visual Studio 2015 ou posteriormente. Para mais informações, consulte Introdução com .NET Native.
Para suportar a depuração de aplicações .NET Native, foram adicionadas várias novas interfaces e enumerações à API desorçada não gerido. Para mais informações, consulte o tema Debugging (Referência API Não Gerido).
Pacotes de .NET Framework de código aberto
.NET Os pacotes core tais como as coleções imutáveis, APIs SIMD e APIs de rede, como os encontrados no espaço de System.Net.Http nomes, estão agora disponíveis como pacotes de código aberto em GitHub. Para aceder ao código, consulte .NET no GitHub. Para obter mais informações e como contribuir para estes pacotes, consulte Introdução a .NET, .NET Home Page em GitHub.
Novidades em .NET Framework 4.5.2
Novas APIs para aplicações ASP.NET. Os novos HttpResponse.AddOnSendingHeaders e HttpResponseBase.AddOnSendingHeaders métodos permitem inspecionar e modificar cabeçalhos de resposta e código de estado, uma vez que a resposta está a ser lavada para a aplicação do cliente. Considere usar estes métodos em vez dos PreSendRequestHeaders eventos; PreSendRequestContent são mais eficientes e fiáveis.
O HostingEnvironment.QueueBackgroundWorkItem método permite-lhe agendar pequenos itens de trabalho de fundo. ASP.NET rastreia estes itens e impede o IIS de encerrar abruptamente o processo de trabalhador até que todos os itens de trabalho de fundo tenham concluído. Este método não pode ser chamado fora de um domínio de aplicações gerido ASP.NET.
As novas HttpResponse.HeadersWritten e HttpResponseBase.HeadersWritten propriedades devolvem valores booleanos que indicam se os cabeçalhos de resposta foram escritos. Pode utilizar estas propriedades para se certificar de que as chamadas para APIs, tais como HttpResponse.StatusCode (que lançam exceções se os cabeçalhos tiverem sido escritos) serão bem sucedidas.
Redimensionamento em controlos Windows Forms. Esta funcionalidade foi expandida. Pode agora utilizar a definição de DPI do sistema para redimensionar componentes dos seguintes controlos adicionais (por exemplo, a seta de queda em caixas de combinação):
Esta é uma funcionalidade de opt-in. Para o ativar, desave o
EnableWindowsFormsHighDpiAutoResizing
elemento paratrue
o ficheiro de configuração de aplicação (app.config):<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
Nova funcionalidade de fluxo de trabalho. Um gestor de recursos que está a usar o EnlistPromotableSinglePhase método (e, portanto, implementar a IPromotableSinglePhaseNotification interface) pode usar o novo Transaction.PromoteAndEnlistDurable método para solicitar o seguinte:
Promover a transação para uma transação do Coordenador de Transações Distribuídas pela Microsoft (MSDTC).
Substitua IPromotableSinglePhaseNotification por um ISinglePhaseNotification, que é um alistamento durável que suporta compromissos de uma única fase.
Isto pode ser feito dentro do mesmo domínio da aplicação, e não requer nenhum código extra não gerido para interagir com o MSDTC para realizar a promoção. O novo método só pode ser chamado quando há uma chamada pendente do System.TransactionsIPromotableSinglePhaseNotification
Promote
método que é implementado pelo alistamento promovido.Melhorias de perfis. As seguintes novas APIs de perfis não geridos proporcionam perfis mais robustos:
- Estrutura COR_PRF_ASSEMBLY_REFERENCE_INFO
- COR_PRF_HIGH_MONITOR Enumeração
- Obter Método de Referências de Montagem
- Método GetEventMask2
- Método SetEventMask2
- Método de Referência De Montagem
Implementações anteriores
ICorProfiler
apoiaram o carregamento preguiçoso de conjuntos dependentes. As novas APIs de perfis exigem que os conjuntos dependentes que são injetados pelo perfis sejam carregados imediatamente, em vez de serem carregados após a inicialização da app. Esta alteração não afeta os utilizadores das APIs existentesICorProfiler
.A depurar melhorias. As novas APIs de depuradas não geridos que se seguem proporcionam uma melhor integração com um perfis. Pode agora aceder aos metadados inseridos pelo perfis, bem como às variáveis locais e ao código produzidos pelo compilador ReJIT quando despejam a depuração.
Mudanças no rastreio do evento. .NET Framework 4.5.2 permite rastreios de atividades fora do processo, rastreio de eventos para Windows (ETW)para uma área de superfície maior. Isto permite que os fornecedores de Advanced Power Management (APM) forneçam ferramentas leves que rastreiem com precisão os custos de pedidos e atividades individuais que cruzam fios. Estes eventos só são levantados quando os controladores da ETW os permitem; portanto, as alterações não afetam código ou código ETW previamente escrito que funciona com etw desativado.
Promover uma transação e convertê-la para um alistamento durável
Transaction.PromoteAndEnlistDurableé uma nova API adicionada a .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 Enlistment
O método pode ser utilizado por um alistamento que foi previamente criado em Transaction.EnlistPromotableSinglePhase resposta ao ITransactionPromoter.Promote método. Solicita
System.Transactions
a promoção da transação para uma transação MSDTC e a "conversão" do alistamento promovido a um alistamento duradouro. Depois de este método ser concluído com sucesso, a IPromotableSinglePhaseNotification interface deixará de ser referenciada porSystem.Transactions
, e quaisquer notificações futuras chegarão na interface fornecida ISinglePhaseNotification . O alistamento em questão deve funcionar como um alistamento duradouro, apoiando a exploração e recuperação de transações. Consulte para Transaction.EnlistDurable mais detalhes. Além disso, o alistamento deve apoiar ISinglePhaseNotification. Este método só pode ser chamado durante o processamento de uma ITransactionPromoter.Promote chamada. Se não for esse o caso, é lançada uma TransactionException exceção.
Novidades em .NET Framework 4.5.1
Atualizações de abril de 2014:
Visual Studio 2013 Update 2 inclui atualizações para os modelos da Biblioteca de Classes Portáteis para suportar estes cenários:
Você pode usar apis Windows Runtime em bibliotecas portáteis que visam Windows 8.1, Windows Phone 8.1, e Windows Phone Silverlight 8.1.
Pode incluir XAML (Windows. A UI. Tipos de XAML) em bibliotecas portáteis quando se Windows 8.1 ou Windows Phone 8.1. Os seguintes modelos XAML são suportados: Página em branco, dicionário de recursos, controlo de modelos e controlo do utilizador.
Pode criar um componente de Windows Runtime portátil (.ficheiro winmd) para utilização em aplicações da Loja que visam Windows 8.1 e Windows Phone 8.1.
Você pode retarget uma biblioteca de Windows Store ou Windows Phone Store como uma Biblioteca de Classe Portátil.
Para obter mais informações sobre estas alterações, consulte a Biblioteca de Classe Portátil.
O conjunto de conteúdos .NET Framework agora inclui documentação para .NET Native, que é uma tecnologia de pré-compensação para a construção e implementação de aplicações Windows. .NET Native compila as suas aplicações diretamente para código nativo, em vez de linguagem intermédia (IL), para um melhor desempenho. Para mais detalhes, consulte compilar apps com .NET Native.
A .NET Framework Reference Source proporciona uma nova experiência de navegação e uma funcionalidade melhorada. Pode agora navegar pelo código fonte .NET Framework online, fazer o download da referência para visualização offline e passar pelas fontes (incluindo patches e atualizações) durante a depuragem. Para mais informações, consulte a entrada no blog Um novo visual para .NET Reference Source.
As novas funcionalidades e melhorias nas classes base em .NET Framework 4.5.1 incluem:
Reorientação automática de ligação para conjuntos. Começando com Visual Studio 2013, quando compila uma aplicação que visa .NET Framework 4.5.1, podem ser adicionados redirecionamentos de encadernação ao ficheiro de configuração da aplicação se a sua app ou os seus componentes referenciarem várias versões do mesmo conjunto. Também pode ativar esta funcionalidade para projetos que visam versões mais antigas de .NET Framework. Para obter mais informações, consulte Como: Ative e desative a reorientação automática de encadernação automática.
Capacidade de recolher informações de diagnóstico para ajudar os desenvolvedores a melhorar o desempenho de aplicações de servidor e nuvem. Para mais informações, consulte os WriteEventWithRelatedActivityId métodos e WriteEventWithRelatedActivityIdCore métodos da EventSource turma.
Capacidade de compactar explicitamente a pilha de objetos grandes (LOH) durante a recolha do lixo. Para mais informações, consulte a GCSettings.LargeObjectHeapCompactionMode propriedade.
Melhorias adicionais no desempenho, como ASP.NET suspensão de aplicações, melhorias multi-core JIT e arranque de aplicações mais rápido após uma atualização de .NET Framework. Para mais detalhes, consulte o anúncio .NET Framework 4.5.1 e a aplicação ASP.NET suspender o blog post.
As melhorias Windows Forms incluem:
Redimensionamento em controlos Windows Forms. Pode utilizar a definição de DPI do sistema para redimensionar componentes de controlos (por exemplo, os ícones que aparecem numa grelha de propriedade) optando por uma entrada no ficheiro de configuração da aplicação (app.config) para a sua aplicação. Esta funcionalidade é suportada atualmente nos seguintes controlos Windows Forms:
- PropertyGrid
- TreeView
- Alguns aspetos do DataGridView (ver novas funcionalidades em 4.5.2 para controlos adicionais suportados)
Para ativar esta funcionalidade, adicione um novo <elemento de definição de apps> ao ficheiro de configuração (app.config) e desaprove o
EnableWindowsFormsHighDpiAutoResizing
elemento paratrue
:<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
As melhorias na depuragem das suas aplicações .NET Framework em Visual Studio 2013 incluem:
Valores de retorno no depurar Visual Studio. Quando depurar uma aplicação gerida em Visual Studio 2013, a janela Autos exibe tipos e valores de retorno para métodos. Esta informação está disponível para desktop, Windows Store e Windows Phone apps. Para obter mais informações, consulte examinar os valores de devolução das chamadas metódulas.
Editar e Continuar para aplicações de 64 bits. Visual Studio 2013 suporta a funcionalidade Edit e Continue para aplicações geridas de 64 bits para desktop, Windows Store e Windows Phone. As limitações existentes permanecem em vigor tanto para aplicações de 32 bits como de 64 bits (ver a última secção do artigo De alteração do Código Suportado (C# ).
Depuragem assínc-consciente. Para facilitar a depuração de aplicações assíncronos em Visual Studio 2013, a pilha de chamadas esconde o código de infraestrutura fornecido pelos compiladores para suportar a programação assíncroa, e também cadeias em molduras lógicas dos pais para que possa seguir a execução lógica do programa de forma mais clara. Uma janela Tasks substitui a janela Tarefas Paralelas e apresenta tarefas relacionadas com um determinado ponto de rutura, e também exibe quaisquer outras tarefas que estejam atualmente ativas ou agendadas na aplicação. Pode ler sobre esta funcionalidade na secção "Depurar assínco" do anúncio de 4.5.1 da .NET Framework.
Melhor suporte de exceção para componentes Windows Runtime. Em Windows 8.1, as exceções que surgem de aplicações Windows Store preservam informações sobre o erro que causou a exceção, mesmo além dos limites da linguagem. Pode ler sobre esta funcionalidade na secção "Windows Store de desenvolvimento de apps" do anúncio 4.5.1 da .NET Framework.
A partir de Visual Studio 2013, pode utilizar a Ferramenta de Otimização Guiada de Perfil Gerido (Mpgo.exe) para otimizar as aplicações Windows 8.x Store, bem como aplicações de desktop.
Para obter novas funcionalidades no ASP.NET 4.5.1, consulte ASP.NET e Web Tools para Visual Studio notas de lançamento de 2013.
Novidades em .NET Framework 4.5
Aulas base
A capacidade de reduzir o sistema reinicia detetando e fechando .NET Framework 4 aplicações durante a implementação. Ver Recomeçamento do sistema de redução durante .NET Framework 4.5 Instalações.
Suporte para matrizes que sejam maiores do que 2 gigabytes (GB) em plataformas de 64 bits. Esta funcionalidade pode ser ativada no ficheiro de configuração da aplicação. Consulte o elemento gcAllowVeryLargeObjects>, que também lista outras restrições sobre o< tamanho do objeto e o tamanho da matriz.
Melhor desempenho através da recolha de lixo de fundo para servidores. Quando se utiliza a recolha de lixo do servidor no .NET Framework 4.5, a recolha de lixo de fundo é automaticamente ativada. Consulte a secção de recolha de lixo do servidor de fundo do tópico Fundamentals of Garbage Collection .
Compilação de fundo just-in-time (JIT), que está opcionalmente disponível em processadores multi-core para melhorar o desempenho da aplicação. Consulte ProfileOptimization.
Capacidade de limitar o tempo que o motor de expressão regular tentará resolver uma expressão regular antes de se esgotar. Veja a Regex.MatchTimeout propriedade.
Capacidade de definir a cultura padrão para um domínio de aplicação. Veja a CultureInfo aula.
Suporte à consola para codificação Unicode (UTF-16). Veja a Console aula.
Suporte para a versão de dados culturais de encomendas e comparação de cordas. Veja a SortVersion aula.
Melhor desempenho na recuperação de recursos. Consulte o Pacote e implemente recursos.
Melhorias de compressão zip para reduzir o tamanho de um ficheiro comprimido. Veja o espaço de System.IO.Compression nomes.
Capacidade de personalizar um contexto de reflexão para anular o comportamento de reflexão padrão através da CustomReflectionContext classe.
Suporte para a versão de 2008 da norma Internationalized Domain Names in Applications (IDNA) quando a System.Globalization.IdnMapping classe é utilizada em Windows 8.
Delegação de comparação de cordas com o sistema operativo, que implementa o Unicode 6.0, quando o .NET Framework é utilizado em Windows 8. Ao correr noutras plataformas, o .NET Framework inclui os seus próprios dados de comparação de cordas, que implementa o Unicode 5.x. Consulte a String aula e a secção de Observações da SortVersion turma.
Capacidade de calcular os códigos de haxixe para cadeias por cada aplicação domínio. Ver <UseRandomizedStringHashAlgorithm> Element.
Tipo de suporte de reflexão dividido entre Type e TypeInfo classes. Consulte a Reflexão no .NET Framework para aplicações Windows Store.
Managed Extensibility Framework (MEF)
Em .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ções que lhe permite criar peças baseadas em nomear convenções em vez de atributos.
Várias miras.
Um subconjunto de MEF que pode utilizar quando criar aplicações Windows 8.x Loja. Este subconjunto está disponível como um pacote transferível da Galeria NuGet. Para instalar o pacote, abra o seu projeto em Visual Studio, escolha Gerir os Pacotes NuGet no menu Project e pesquisar online o
Microsoft.Composition
pacote.
Para mais informações, consulte Managed Extensibility Framework (MEF).
Operações de arquivo assíncronos
Em .NET Framework 4.5, novas funcionalidades assíncronas foram adicionadas às línguas C# e Visual Basic. Estas funcionalidades adicionam um modelo baseado em tarefas para executar operações assíncronos. Para utilizar este novo modelo, utilize os métodos assíncronos nas aulas de E/S. Consulte o Ficheiro Assíncronos I/O.
Ferramentas
No .NET Framework 4.5, o Gerador de Ficheiros de Recursos (Resgen.exe) permite criar um ficheiro .resw para utilização em aplicações Windows 8.x Loja a partir de um ficheiro .resources incorporado numa montagem .NET Framework. Para obter mais informações, consulte Resgen.exe (Gerador de Ficheiros de Recursos).
A Otimização Guiada de Perfil Gerido (Mpgo.exe) permite-lhe melhorar o tempo de arranque da aplicação, a utilização da memória (tamanho do conjunto de trabalho) e a produção através da otimização de conjuntos de imagens nativas. A ferramenta de linha de comando gera dados de perfil para conjuntos de aplicações de imagem nativas. Consulte Mpgo.exe (Ferramenta de otimização guiada de perfil gerido). A partir de Visual Studio 2013, pode utilizar Mpgo.exe para otimizar aplicações Windows 8.x Loja, bem como aplicações para desktop.
Computação paralela
.NET Framework 4.5 fornece várias novidades e melhorias para computação paralela. Estes incluem um melhor desempenho, um maior controlo, um melhor suporte para a programação assíncronica, uma nova biblioteca de fluxos de dados e um melhor suporte para a depuração paralela e análise de desempenho. Consulte a entrada What's New for Parallelism em .NET Framework 4.5 na Programação Paralela com o blog .NET.
Web
ASP.NET 4.5 e 4.5.1 adicionam a ligação do modelo para Web Forms, suporte WebSocket, manipuladores assíncronos, melhorias de desempenho e muitas outras funcionalidades. Para obter mais informações, veja os seguintes recursos:
Networking
.NET Framework 4.5 fornece uma nova interface de programação para aplicações HTTP. Para mais informações, consulte os novos System.Net.Http espaços de System.Net.Http.Headers nome.
O suporte também está incluído para uma nova interface de programação para aceitar e interagir com uma ligação WebSocket utilizando as classes existentes HttpListener e relacionadas. Para mais informações, consulte o novo System.Net.WebSockets espaço de nome e a HttpListener classe.
Além disso, .NET Framework 4.5 inclui as seguintes melhorias em rede:
Suporte URI compatível com RFC. Para mais informações, consulte Uri e afins classes.
Suporte para análise de nome de domínio internacionalizado (IDN). Para mais informações, consulte Uri e afins classes.
Suporte para Internacionalização de Endereço de E-mail (EAI). Para mais informações, consulte o espaço de System.Net.Mail nomes.
Melhor suporte IPv6. Para mais informações, consulte o espaço de System.Net.NetworkInformation nomes.
Suporte de tomada de dois modos. Para mais informações, consulte as Socket aulas e TcpListener as aulas.
Windows Presentation Foundation (WPF)
No .NET Framework 4.5, Windows Presentation Foundation (WPF) contém alterações e melhorias nas seguintes áreas:
O novo Ribbon controlo, que permite implementar uma interface de utilizador de fita que acolhe uma barra de ferramentas de acesso rápido, menu de aplicações e separadores.
A nova INotifyDataErrorInfo interface, que suporta a validação de dados sincronizados e assíncronos.
Novas funcionalidades para as VirtualizingPanel aulas e Dispatcher para as aulas.
Melhor desempenho ao exibir grandes conjuntos de dados agrupados e aceder a coleções em fios não UI.
Ligação de dados a propriedades estáticas, ligação de dados a tipos personalizados que implementam a ICustomTypeProvider interface, e recuperação de informações vinculativas de dados a partir de uma expressão vinculativa.
O reposicionamento dos dados à medida que os valores mudam (formação ao vivo).
Capacidade de verificar se o contexto de dados de um recipiente de item está desligado.
Capacidade de definir a quantidade de tempo que deve decorrer entre alterações de propriedade e atualizações de fonte de dados.
Melhor suporte para implementar padrões de eventos fracos. Além disso, os eventos podem agora aceitar extensões de marcação.
Windows Communication Foundation (WCF)
Em .NET Framework 4.5, foram adicionadas as seguintes características para tornar mais simples escrever e manter aplicações Windows Communication Foundation (WCF):
Simplificação dos ficheiros de configuração gerados.
Apoio ao desenvolvimento do primeiro contrato.
Capacidade de configurar ASP.NET modo de compatibilidade mais facilmente.
Alterações nos valores de propriedade de transporte predefinidos para reduzir a probabilidade de ter de os definir.
Atualizações para a XmlDictionaryReaderQuotas classe para reduzir a probabilidade de ter de configurar manualmente quotas para leitores de dicionários XML.
A validação dos ficheiros de configuração do WCF por Visual Studio como parte do processo de construção, para que possa detetar erros de configuração antes de executar a sua aplicação.
Novo suporte de streaming assíncronos.
Novo mapeamento de protocolo HTTPS para facilitar a exposição de um ponto final sobre HTTPS com Serviços de Informação Internet (IIS).
Capacidade de gerar metadados num único documento WSDL, anexando
?singleWSDL
o URL de serviço.Suporte websockets para permitir uma verdadeira comunicação bidirecional sobre as portas 80 e 443 com características de desempenho semelhantes ao transporte TCP.
Suporte para configurar serviços em código.
Pontas de ferramentas do Editor XML.
ChannelFactory caching apoio.
Suporte de compressão de codificação binária.
Suporte para um transporte UDP que permite aos desenvolvedores escrever serviços que usam mensagens "fogo e esquecimento". Um cliente envia uma mensagem para um serviço e não espera resposta do serviço.
Capacidade de suportar vários modos de autenticação num único ponto final do WCF ao utilizar a segurança de transporte e transporte HTTP.
Suporte para serviços de WCF que usam nomes de domínio internacionalizados (IDNs).
Para mais informações, consulte O Que É Novo na Windows Communication Foundation.
Windows Workflow Foundation (WF)
Em .NET Framework 4.5, foram adicionadas várias novidades à Windows Workflow Foundation (WF), incluindo:
Fluxos de trabalho de máquinas estatais, que foram introduzidos pela primeira vez como parte de .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áquinas estatais. Estas aulas e atividades foram atualizadas para .NET Framework 4.5 para incluir:
A capacidade de estabelecer pontos de rutura nos 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 partilhada.
Atividades para a criação de fluxos de trabalho de máquinas estatais, incluindo: StateMachine, Statee Transition.
Funcionalidades melhoradas do Workflow Designer, tais como:
Capacidades de pesquisa de fluxo de trabalho melhoradas em Visual Studio, incluindo Quick Find and Find in Files.
Capacidade de criar automaticamente uma atividade de Sequência quando uma segunda atividade infantil é adicionada a uma atividade de contentor, e incluir ambas as atividades na atividade de Sequência.
Suporte panorâmia, que permite que a parte visível de um fluxo de trabalho seja alterada sem utilizar as barras de deslocamento.
Uma nova visão de contorno do documento que mostra os componentes de um fluxo de trabalho numa vista de contorno de estilo árvore e permite selecionar um componente na vista de contorno do documento .
Capacidade de adicionar anotações a atividades.
Capacidade de definir e consumir delegados de atividade utilizando o designer de fluxo de trabalho.
Ligação automática e auto-inserção para atividades e transições em fluxos de trabalho de máquinas estatais e fluxogramas.
Armazenamento informações do estado de visualização para um fluxo de trabalho num único elemento no ficheiro XAML, para que possa localizar e editar facilmente as informações do estado de visualização.
Uma atividade de contentor noPersistScope para evitar que as atividades infantis persistam.
Suporte para expressões C#:
Os projetos de fluxo de trabalho que usam Visual Basic utilizarão expressões Visual Basic, e os projetos de fluxo de trabalho C# usarão expressões C#.
Os projetos de fluxo de trabalho C# criados em Visual Studio 2010 e que têm expressões Visual Basic são compatíveis com projetos de fluxo de trabalho C# que utilizam expressões C#.
Melhorias de versão:
A nova WorkflowIdentity classe, que fornece um mapeamento entre uma instância de fluxo de trabalho persistente e a sua definição de fluxo de trabalho.
Execução lado a lado de várias versões de fluxo de trabalho no mesmo anfitrião, incluindo WorkflowServiceHost.
Em Dynamic Update, a capacidade de modificar a definição de uma instância de fluxo de trabalho persistido.
Desenvolvimento de serviços de fluxo de trabalho de primeiro contrato, que fornece suporte para gerar automaticamente atividades para corresponder a um contrato de serviço existente.
Para mais informações, consulte o What's New in Windows Workflow Foundation.
.NET para aplicativos Windows 8.x Loja
Windows 8.x As aplicações da Loja são concebidas para fatores de forma específicos e aproveitam o poder do sistema operativo Windows. Um subconjunto de .NET Framework 4.5 ou 4.5.1 está disponível para a construção de aplicativos Windows 8.x Loja para Windows utilizando C# ou Visual Basic. Este subconjunto chama-se .NET para aplicações Windows 8.x Store e é discutido numa visão geral.
Bibliotecas de classe portátil
O projeto Portable Class Library em Visual Studio 2012 (e versões posteriores) permite-lhe escrever e construir conjuntos geridos que funcionam em várias plataformas .NET Framework. Utilizando um projeto da Biblioteca de Classes Portáteis, você escolhe as plataformas (como Windows Phone e .NET para aplicações Windows 8.x Store) para o destino. Os tipos e membros disponíveis no seu projeto são automaticamente restritos aos tipos e membros comuns através destas plataformas. Para mais informações, consulte a Biblioteca de Classe Portátil.