.NET 4.6.2 Framework 预览版发布

[原文发表地址]:Announcing the .NET Framework 4.6.2 Preview

[原文发表时间]:March 30, 2016

我们很高兴宣布.NET4.6.2 Framework 预览版的发布。 你可以从以下链接中下载发布的版本。

· .NET Framework 4.6.2 Preview – 脱机安装程序

· .NET Framework 4.6.2 Preview – Web安装程序

· .NET Framework 4.6.2 Preview – 开发者工具包

我们已经在下列产品中添加了新的功能和接口:

· TLS 1.1/1.2 对ClickOnce 的支持

· 启用Project Centennial版本的.Net桌面应用程序

· 对额外的加密标准的支持

· WPF支持软键盘和每个监视器的DPI

在我们已经发布的GitHub上,可以看到完整的更改列表和我们发布的API diff比较中的.NET框架4.6.2预览更改集

ClickOnce

传输层安全性(TLS)1.1和1.2支持

ClickOnce 已更新, 可以支持TLS 1.1和1.2。 ClickOnce 将自动检测哪个TLS协议是在运行时所需。在ClickOnce 应用程序要启用此功能时, 没有需要的额外步骤。

对于可预见的兼容性,ClickOnce 仍然支持TLS 1.0,对于应用程序,则不能升级。

对于.NET Framework 4.5.2、4.6和4.6.1版本,支持TLS 1.1和1.2,以及Windows 7 及以上的版本计划将于2016年4月发布。

将你的桌面程序转换为UWP(Project Centennial)

Windows 现在提供功能,从而使现有的Windows 桌面应用程序 (包括WPF/Windows Forms) 成为通用的Windows 平台 (一下简称UWP) 。这种功能之前被称为“Project Centennial”。这项技术的目标是通过使开发人员能够逐渐将他们现有的代码库迁移到UWP, 将他们的应用程序引向所有的Windows 10设备,来充当一座桥梁。

下图显示一个WPF应用程序, 而这个应用程序已经转换到Centennial并且目前包含一个动态砖,之前只可用于UWP应用程序。

Centennial WPF

.NET 的桌面应用程序将继续像以前那样,作为一个桌面应用程序运行。你可以添加一个UWP组件,启用UWP功能,例如动态砖和分享合约。UWP组件将会生成并用.NET本机编译,就像构建任何其他的UWP应用程序。

密码系统

X509证书现在支持FIPS 186-3 DSA

.Net 4.6.2框架增加了对DSA (数字签名算法) X509 证书的支持,X509键超出FIPS 186-2 的1024位。

除了支持更大密钥大小的FIPS 186-3, .NET4.6.2允许计算使用SHA-2族的哈希算法(SHA256,SHA384和SHA512)。FIPS186-3 支持由新DSACng 类提供。

根据在RSA (.NET 4.6) 和ECDsa (.NET 4.6.1) 最近的变化,,DSA抽象基类有额外的方法可以允许调用者使用这个功能而不需要转换。

 1 public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert) 
 2 { 
 3     using (DSA dsa = cert.GetDSAPrivateKey()) 
 4     { 
 5         return dsa.SignData(data, HashAlgorithmName.SHA384); 
 6     } 
 7 } 
 8 
  
 9 public static void VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert) 
 10 { 
 11     using (DSA dsa = cert.GetDSAPublicKey()) 
 12     { 
 13         return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384); 
 14     } 
 15 } 

增加输入到ECDiffieHellman 密钥推导例程的清晰度

.NET 框架 4.6.2 添加支持Ellptic 曲线 Diffie-hellman 密钥协定,包括三个不同 KDF (密钥派生函数) 例程。对例程和例程本身而言,投入了通过对ECDiffieHellmanCng 对象的属性配置; 但因为不是每个例程读取每个输入的属性,因此没有足够的空间导致混乱。ECDiffieHellman 基类已被更新,以便更清楚地表示这些 KDF 例程和他们的输入 ︰

 1 /// <summary> 
 2 /// Derive key material using the formula HASH(secretPrepend || x || secretAppend) where x is the computed 
 3 /// result of the EC Diffie-Hellman algorithm. 
 4 /// </summary> 
 5 public virtual byte[] DeriveKeyFromHash(ECDiffieHellmanPublicKey otherPartyPublicKey, HashAlgorithmName hashAlgorithm,  
 6   byte[] secretPrepend, byte[] secretAppend) 
 7 
  
 8 /// <summary> 
 9 /// Derive key material using the formula HMAC(hmacKey, secretPrepend || x || secretAppend) where x is the computed 
 10 /// result of the EC Diffie-Hellman algorithm. 
 11 /// </summary> 
 12 public virtual byte[] DeriveKeyFromHmac(ECDiffieHellmanPublicKey otherPartyPublicKey, HashAlgorithmName hashAlgorithm,  
 13   byte[] hmacKey, byte[] secretPrepend, byte[] secretAppend) 
 14 
  
 15 /// <summary> 
 16 /// Derive key material using the TLS pseudo-random function (PRF) derivation algorithm. 
 17 /// </summary> 
 18 public virtual byte[] DeriveKeyTls(ECDiffieHellmanPublicKey otherPartyPublicKey, byte[] prfLabel, byte[] prfSeed) 

支持保存密钥的对称加密

Windows 密码库(CNG)已经支持用于存储保留在软件和硬件设备上的对称密钥,并且.NET 4.6.2可以让用户使用此功能。由于密钥的名称和密钥的提供者是特定实现的,因此使用此功能时,要求调用具体实施类型的构造函数,而不是更为常见的工厂方法(如Aes.Create())。对于AES(AesCng)密钥的对称加密和3DES(TripleDESCng)算法:

 1 public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv) 
 2 { 
 3     using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)) 
 4     { 
 5         aes.IV = iv; 
 6         
 7         // Using the zero-argument overload is required to make use of the persisted key 
 8         using (ICryptoTransform encryptor = aes.CreateEncryptor()) 
 9         { 
 10             if (!encryptor.CanTransformMultipleBlocks) 
 11             { 
 12                 throw new InvalidOperationException("This is a sample, this case wasn’t handled..."); 
 13             } 
 14                 return encryptor.TransformFinalBlock(data, 0, data.Length); 
 15         } 
 16     } 
 17 } 

SignedXml 支持SHA-2哈希算法

.NET 4.6.2已添加到SignedXml的支持,它允许RSA-SHA256, RSA-SHA384, and RSA-SHA512 PKCS # 1的签名方法,以及SHA256SHA384,和SHA512参考摘要算法。URI常量都暴露在SignedXml:

 1 public const string XmlDsigSHA256Url = "www.w3.org/2001/04/xmlenc#sha256"; 
 2 public const string XmlDsigRSASHA256Url = "www.w3.org/2001/04/xmldsig-more#rsa-sha256"; 
 3 public const string XmlDsigSHA384Url = "www.w3.org/2001/04/xmldsig-more#sha384"; 
 4 public const string XmlDsigRSASHA384Url = "www.w3.org/2001/04/xmldsig-more#rsa-sha384"; 
 5 public const string XmlDsigSHA512Url = "www.w3.org/2001/04/xmlenc#sha512"; 
 6 public const string XmlDsigRSASHA512Url = "www.w3.org/2001/04/xmldsig-more#rsa-sha512"; 

任何已登记到 CryptoConfig, 添加对这些算法的支持自定义的 SignatureDescription 处理程序的程序,都会像之前一样继续运行。但是现在既然有了平台默认的CryptoConfig, 注册就不再是必要的了。

 1 private static void SignDocumentRsaSha256(XmlDocument doc, RSA privateKey) 
 2 { 
 3     SignedXml signer = new SignedXml(doc); 
 4     Reference reference = new Reference(""); 
 5     reference.AddTransform(new XmlDsigEnvelopedSignatureTransform()); 
 6     reference.DigestMethod = SignedXml.XmlDsigSHA256Url; 
 7     signer.AddReference(reference); 
 8     signer.SigningKey = privateKey; 
 9     signer.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA256Url; 
 10     signer.ComputeSignature(); 
 11 
  
 12     doc.DocumentElement.AppendChild(signer.GetXml()); 
 13 }  

Windows 演示文稿基础

软键盘支持

在WPF应用程序中,软键盘支持自动调用和接触触摸键盘,并且在Win10上没有禁用 WPF 手写/触控支持。在.NET 4.6.2之前的WPF 应用程序不会暗中支持调用或解除的触摸键盘,并且不禁用 WPF 触笔/触摸的支持。这是由于应用程序在Windows 8上打开时,触摸键盘轨道焦点的方式有变化。

soft keyboard

每个监视器分辨率

WPF 应用程序是系统的-DPI 意识,这意味着应用程序被缩放通过依靠 DPI 显示器来呈现应用程序的窗口缩放。这可能导致锐度丢失,文本模糊等。.NET4.6.2 之前, 在WPF应用程序中,附加本机代码需要启用每个监视器 DPI 认知。

鉴于最近处于高 DPI 和混合 DPI 环境生态系统中,我们现在已启用 WPF 应用程序中每个监视器 DPI 认知。关于如何使你的WPF 应用程序成为每个 监视器DPI,请参示例和开发者指南

提供反馈

我们希望听到您的反馈意见,当你使用预览版的时候︰