热门排行
简介
Microsoft .NET Framework 4.7.2是一款由微软官方推出的最新版本,新版最大的改进就是支持Azure Active Directory的通用和多重身份验证(MFA,Multi-factor authentication),同时兼容.NET 4.6、4.5及以下多个版本,兼容性良好,Web在线安装包必须在联网的情况下才能安装,优点就是安装包体积较小,欢迎有需要此款工具的朋友们前来下载使用。
Microsoft .NET Framework 4.7.2介绍
Microsoft .NET Framework 4.7.2是与.NET Framework 4,4.5,4.5.1,4.5.2,4.6,4.6.1,4.6.2,4.7和4.7.1高度兼容的就地更新。
离线软件包可用于由于缺乏互联网连接而无法使用网络安装程序的情况。该软件包比Web安装程序更大,并且不包含语言包。我们建议您使用Web安装程序而不是脱机安装程序来获得最佳效率和带宽要求。
Microsoft .NET Framework 4.7.2 离线安装程序:点击下载
安装此软件包时,将在您的操作系统上安装以下软件包或更新:
在Windows 7 Service Pack 1(SP1)和Windows Server 2008 R2 SP1中,.NET Framework 4.7.2在“控制面板”中的“程序和功能”项下列为已安装的产品。
在Windows Server 2012中,Microsoft Windows更新(KB4054542)在“控制面板”中的“已安装的更新”项下列出。
在Windows 8.1或Windows Server 2012 R2中,Microsoft Windows更新(KB4054566)显示在“控制面板”中的“已安装的更新”项下。
在Windows 10周年更新,Windows 10 Creators更新和Windows Server 2016中,Microsoft Windows更新(KB4054590)在“控制面板”中的“已安装更新”项下列出。
在Windows 10 Fall Creators更新中,Microsoft Windows更新(KB4073120)在“控制面板”中的“已安装更新”项下列出。
安装教程
1、在本站下载Microsoft .NET Framework 4.7.2 Web在线安装包,并解压后,双击“NDP472-KB4054531-Web.exe”程序,等待片刻
2、勾选“我已阅读并接受许可条款”并点击安装即可
官方介绍
.NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。
.NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境。.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各应用程序之间,可以使用Web服务进行沟通。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行时(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP NET的面向Web的网络应用程序模板(Web Forms和Web Services)。
公共语言运行时(CLR),是一个运行时环境,管理代码的执行并使开发过程变得更加简单。CLR是一种受控的执行环境,其功能通过编译器与其它工具共同展现。
在CLR之上的是服务框架,它提供了一套开发人员希望在标准语言库中存在的基类库,包括集合、输入/输出、字符串及数据类。
那么,在Windows DNA(分布式集成网络应用体系结构)之后,微软提出新的.NET框架(新托管代码编程模型)的主要原因是什么?
问题出现在已开发了多种技术的整合的一个单一应用程序的子系统上。例如,一个制造企业有不同的系统,如库存管理系统,物料清单系统,财务总帐系统,所有使用可用于应用程序开发的各种技术实现的。这些系统需要集成在一起,从而形成一个更高级别的企业信息系统的组织。要做到这一点,应用程序开发人员必须使用如微 软的分布式组件对象模型(DCOM),通用对象请求代理体系结构(CORBA),Java远程方法调用(RMI)等技术。然而,这些分布的技术通过已开发的应用程序编程语言非常紧密地耦合在一起。
跨语言的互操作性也是受限的。例如,如果在Visual C++类已经被创建,那么不可能在Visual Basic开发新的类并将其扩展到Visual C++。因此,开发者将不得不用每一种项目中用到的语言重新编写同样的逻辑的类。功能的可重用性得到了支持,但在早期的技术,真正的代码的可重用性是不可用。因此,开发人员不得不学习被用于应用程序的开发组织用到的所有语言。注册的COM组件。COM组件注册,才可以在目标机器上使用的应用程序。应用程序必须查找Windows注册表中查找并加载的COM组件。
.NET Framework 4.7.2新功能
ADO.NET
最大的改进就是支持Azure Active Directory的通用和多重身份验证(MFA,Multi-factor authentication)。此外,预览版中还修正了大量的驱动缺陷,例如XEvents丢失、SqlBulkCopy的可靠性问题等。
ASP.NET
ASP.NET中的主要改进是支持Page、Custom Handler和User Control的依赖注入。但是这些改进将如何影响设计模式和能力,具体的细节尚未公布。
另一个特性是可以控制cookies中SameSite属性。以前只能使用URL重写规则设置SameSite。
基类库(BCL,Base Class Library)
HashSet得到了大量关注,其改进包括在性能和内存占用上的改进、一种指定其默认容量的方式、TryGetValue方法,以及用于LINQ支持的ToHashSet扩展方法。
ConcurrentDictionary的性能也得到了改进,并给出了新的GetOrAdd和AddOrUpdate方法重载。
使用.NET Core给出的代码,ReaderWriterLockSlim通过降低写饥饿(writer starvation)的可能性和避免唤醒多个写,实现对竞争问题的更好处理。
此外还有其它一些小的性能改进,涉及DateTime、文件和目录的枚举、TextInfo、Comparer/EqualityComparer.Default、Buffer和ManualResetEventSlim。
CLR
就特性而言改进很少,但是预览版中包含了不少提高可靠性的修补程序,涉及代码生成、垃圾回收和错误恢复和报告等方面。
ClickOnce
现在支持在ClickOnce部署配置文件中启用高DPI。高DPI支持对于高分辨率显示器是必需的特性。Narrator作为一种重要的无障碍工具,现在可以和ClickOnce安装程序一起正常工作。
网络特性
对Uri、HttpClient、SmtpClient、Socket和WebSocket做了重大修正,但是没有给出新的特性。
WCF
用于诊断WCF问题的SvcTraceViewer工具在UI上做了改进,“更合乎逻辑”。其与SvcConfigEditor工具都做了改进,意在符合无障碍标准。
Windows Forms
在此次预览版中,修正了一些长期存在的软件缺陷,例如DataGridView.Dispose抛出NullReferenceException异常(编者按:希望这正是我在2008年曾报告过的缺陷)。令人惊喜的是,DataGridView具有了一项新特性,即可使用F3可更新表中的排序顺序。
更重要的是,该预览版在无障碍问题做了大量的工作,例如用于工具条的键盘无障碍支持。但是应用如果要完全使用这些改进,必须使用.NET Framework 4.7.2重新编译。
Windows Workflow
只给出了一些可靠性上的修正,并未提供新的特性。
WPF
只做了一些软件缺陷的修正,涉及内存泄漏、数据损害和崩溃等。
更新日志:
.NET Framework 4.7.2中的新增功能
.NET Framework 4.7.2包含以下几个方面的新功能:
核心
ASP.NET
联网
SQL
WPF
的ClickOnce
.NET Framework 4.7.2的持续关注点在于提高了可访问性,这使得应用程序可以为辅助技术的用户提供适当的体验。有关.NET Framework 4.7.2中的辅助功能改进的信息,请参阅.NET Framework中的辅助功能的新增功能。
核心
.NET Framework 4.7.2具有大量的加密增强功能,更好的ZIP压缩解压缩支持和其他收集API。
RSA.Create和DSA.Create的新重载
DSA.Create(DSAParameters)和RSA.Create(RSAParameters)方法让您在实例化新的DSA或RSA密钥时提供关键参数。它们允许您替换如下代码:
C#
//在.NET Framework 4.7.2之前
使用(RSA rsa = RSA.Create())
{
rsa.ImportParameters(rsaParameters);
//使用RSA实例执行的其他代码。
}
与这样的代码:
C#
//从.NET Framework 4.7.2开始
使用(RSA rsa = RSA.Create(rsaParameters))
{
//使用rsa实例执行的其他代码。
}
使用DSA.Create(Int32)和RSA.Create(Int32)方法可以生成具有特定密钥大小的新DSA或RSA密钥。例如:
C#
使用(DSA dsa = DSA.Create(2048))
{
//使用dsa实例执行的其他代码。
}
Rfc2898DeriveBytes构造函数接受一个哈希算法名称
Rfc2898DeriveBytes类有三个带有HashAlgorithmName参数的新构造函数,用于标识派生密钥时要使用的HMAC算法。开发人员不应使用SHA-1,而应使用基于SHA-2的HMAC,如SHA-256,如以下示例所示:
C#
private static byte [] DeriveKey(字符串密码,out int迭代,out byte [] salt,
out HashAlgorithmName算法)
{
迭代= 100000;
algorithm = HashAlgorithmName.SHA256;
const int SaltSize = 32;
const int DerivedValueSize = 32;
使用(Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password,SaltSize,
迭代,算法))
{
salt = pbkdf2.Salt;
返回pbkdf2.GetBytes(DerivedValueSize);
}
}
支持临时密钥
PFX导入可以选择直接从内存加载私钥,绕过硬盘驱动器。当在X509Certificate2构造函数或X509Certificate2.Import方法的重载中指定了新的X509KeyStorageFlags.EphemeralKeySet标志时,私钥将作为临时密钥加载。这可以防止密钥在磁盘上可见。然而:
由于密钥没有保存到磁盘,因此使用此标志加载的证书不适合添加到X509Store。
以这种方式加载的密钥几乎总是通过Windows CNG加载。因此,调用者必须通过调用扩展方法(如cert.GetRSAPrivateKey())来访问私钥。 X509Certificate2.PrivateKey属性不起作用。
由于旧版X509Certificate2.PrivateKey属性不适用于证书,因此开发人员在切换到临时密钥之前应执行严格的测试。
编程创建PKCS#10认证签名请求和X.509公钥证书
从.NET Framework 4.7.2开始,工作负载可以生成证书签名请求(CSR),该请求允许将证书请求生成分级到现有工具中。这在测试场景中通常很有用。
有关更多信息和代码示例,请参阅.NET博客中的“编程创建PKCS#10认证签名请求和X.509公钥证书”。
新的SignerInfo成员
从.NET Framework 4.7.2开始,SignerInfo类公开了有关签名的更多信息。您可以检索System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm属性的值以确定签名者使用的签名算法。可以调用SignerInfo.GetSignature来获取签名者的加密签名的副本。
处理CryptoStream后,保留打开的流
从.NET Framework 4.7.2开始,CryptoStream类有一个额外的构造函数,允许Dispose不关闭包装流。在处理CryptoStream实例后,要打开包装流,请按如下所示调用新的CryptoStream构造函数:
C#
var cStream = new CryptoStream(stream,transform,mode,leaveOpen:true);
DeflateStream中的解压缩更改
从.NET Framework 4.7.2开始,默认情况下,DeflateStream类中的解压缩操作的实现已更改为使用本机Windows API。通常,这会导致性能的显着改善。
默认情况下,对于面向.NET Framework 4.7.2的应用程序,支持使用Windows API进行解压缩。面向早期版本的.NET Framework但在.NET Framework 4.7.2下运行的应用程序可以通过将以下AppContext开关添加到应用程序配置文件中来选择此行为:
XML
<AppContextSwitchOverrides value =“Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression = false”/>
其他收集API
.NET Framework 4.7.2为SortedSet <T>和HashSet <T>类型添加了一些新的API。这些包括:
TryGetValue方法,它将其他集合类型中使用的try模式扩展为这两种类型。方法是:
`public bool HashSet.TryGetValue(T equalValue,out T actualValue);
`public bool SortedSet.TryGetValue(T equalValue,out T actualValue);
Enumerable.To *扩展方法,将集合转换为HashSet <T>:
公共静态HashSet ToHashSet(此IEnumerable源);
公共静态HashSet ToHashSet(此IEnumerable来源,IEqualityComparer比较器);
使用新的HashSet <T>构造函数可以设置集合的容量,当您事先知道HashSet <T>的大小时会产生性能优势:
公共HashSet(int容量)
公共HashSet(int容量,IEqualityComparer比较器)
ConcurrentDictionary <TKey,TValue>类包含AddOrUpdate和GetOrAdd方法的新重载,用于从字典中检索值或添加它(如果找不到),并向字典中添加值或在字典中已存在时更新它。
C#
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)
ASP.NET
支持Web窗体中的依赖注入
依赖注入(DI)将对象及其依赖关系解耦,以便仅仅因为依赖关系已更改而不再需要更改对象的代码。在开发面向.NET Framework 4.7.2的ASP.NET应用程序时,您可以:
在处理程序和模块,页面实例以及ASP.NET Web应用程序项目的用户控件中使用基于setter,基于接口和基于构造函数的注入。
在ASP.NET网站项目的处理程序和模块,页面实例和用户控件中使用基于setter和基于接口的注入。
插入不同的依赖注入框架。
支持同一站点的cookies
SameSite可防止浏览器随同跨站点请求一起发送cookie。 .NET Framework 4.7.2添加了一个HttpCookie.SameSite属性,其值是一个System.Web.SameSiteMode枚举成员。如果它的值是SameSiteMode.Strict或SameSiteMode.Lax,则ASP.NET会将SameSite属性添加到set-cookie标头。 SameSite支持适用于HttpCookie对象,以及FormsAuthentication和System.Web.SessionState cookie。
您可以为HttpCookie对象设置SameSite,如下所示:
C#
var c = new HttpCookie(“secureCookie”,“同源”);
c.SameSite = SameSiteMode.Lax;
您还可以通过修改web.config文件在应用程序级配置SameSite cookie:
XML
在<system.web>
<httpCookies sameSite =“严格”/>
</system.web>
您可以通过修改Web配置文件来为FormsAuthentication和System.Web.SessionState cookies添加SameSite:
XML
在<system.web>
<authentication mode =“Forms”>
<形式cookieSameSite =“Lax”>
<! - ... - >
</表格>
<认证/>
<sessionSate cookieSameSite =“Lax”> </ sessionState>
</system.web>
联网
实现HttpClientHandler属性
.NET Framework 4.7.1向System.Net.Http.HttpClientHandler类添加了八个属性。但是,两个抛出了PlatformNotSupportedException。 .NET Framework 4.7.2现在为这些属性提供了一个实现。这些属性是:
CheckCertificateRevocationList
SslProtocols
SQLCLIENT
支持Azure Active Directory通用身份验证和多因素身份验证
不断增长的合规性和安全性要求要求许多客户使用多因素认证(MFA)。另外,目前的最佳实践不鼓励直接在连接字符串中包含用户密码。为了支持这些更改,.NET Framework 4.7.2通过为现有的“Authentication”关键字添加新值“Active Directory Interactive”来扩展SQLClient连接字符串,以支持MFA和Azure AD身份验证。新的交互式方法支持本地和联合Azure AD用户以及Azure AD来宾用户。使用此方法时,SQL数据库支持由Azure AD强制实施的MFA身份验证。另外,认证过程要求用户密码遵守安全最佳实践。
在以前版本的.NET Framework中,SQL连接仅支持SqlAuthenticationMethod.ActiveDirectoryPassword和SqlAuthenticationMethod.ActiveDirectoryIntegrated选项。这两者都是非交互式ADAL协议的一部分,不支持MFA。使用新的SqlAuthenticationMethod.ActiveDirectoryInteractive选项,SQL连接支持MFA以及现有的身份验证方法(密码和集成身份验证),它允许用户以交互方式输入用户密码,而无需在连接字符串中保留密码。
有关更多信息和示例,请参阅.NET博客中的“SQL - Azure AD通用和多因素身份验证支持”。
支持始终加密版本2
NET Framework 4.7.2增加了对基于飞地的Always Encrypted的支持。 Always Encrypted的原始版本是客户端加密技术,加密密钥永远不会离开客户端。在基于飞域的始终加密中,客户端可以选择将加密密钥发送到安全飞地,这是一个安全的计算实体,可被视为SQL Server的一部分,但SQL Server代码无法篡改。要支持基于区域的始终加密,.NET Framework 4.7.2将以下类型和成员添加到System.Data.SqlClient命名空间中:
SqlConnectionStringBuilder.EnclaveAttestationUrl,它为基于飞机的总是加密指定Uri。
SqlColumnEncryptionEnclaveProvider,它是派生所有飞地提供者的抽象类。
SqlEnclaveSession,它封装了给定飞地会话的状态。
SqlEnclaveAttestationParameters,它提供SQL Server用于获取执行特定证明协议所需信息的证明参数。
应用程序配置文件然后指定提供包围提供程序功能的抽象System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider类的具体实现。例如:
XML
<结构>
<configSections>
<section name =“SqlColumnEncryptionEnclaveProviders”type =“System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”/>
</ configSections>
<SqlColumnEncryptionEnclaveProviders>
<提供商>
<add name =“Azure”type =“Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp”/>
<add name =“HGS”type =“Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp”/>
</提供商>
</ SqlColumnEncryptionEnclaveProviders>
</配置>
基于飞地的总是加密的基本流程是:
用户创建一个AlwaysEncrypted连接到SQL Server,支持基于飞地的Always Encrypted。司机联系证明服务,以确保它连接到正确的飞地。
一旦飞地被证实,驱动程序就会与SQL Server上托管的安全区域建立安全通道。
在SQL连接期间,驱动程序共享客户端授权的加密密钥和安全区域。
Windows Presentation Foundation
按源查找资源词典
从.NET Framework 4.7.2开始,诊断助理可以找到从给定源Uri创建的ResourceDictionaries。 (此功能仅供诊断助理使用,不能由生产应用程序使用。)Visual Studio的“编辑并继续”功能等诊断助理允许其用户编辑ResourceDictionary,其目的是将更改应用于正在运行的应用程序。实现这一目标的一个步骤是查找正在编辑的字典中正在运行的应用程序创建的所有ResourceDictionaries。例如,应用程序可以声明一个ResourceDictionary,其内容是从给定的源URI中复制的:
XML
<ResourceDictionary Source =“MyRD.xaml”>
在MyRD.xaml中编辑原始标记的诊断助理可以使用新功能来查找字典。该功能由一个新的静态方法ResourceDictionaryDiagnostics.GetResourceDictionariesForSource实现。诊断助理使用标识原始标记的绝对URI来调用新方法,如以下代码所示:
C#
IEnumerable <ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri(“pack:// application:,,, / MyApp; component / MyRD.xaml”));
该方法返回一个空的枚举值,除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量。
查找ResourceDictionary所有者
从.NET Framework 4.7.2开始,诊断助理可以找到给定ResourceDictionary的所有者。 (此功能仅供诊断助理使用,不供生产应用程序使用。)每当对ResourceDictionary进行更改时,WPF都会自动查找可能受更改影响的所有DynamicResource引用。
诊断助理(如Visual Studio的“编辑并继续”工具)可能希望将其扩展为处理StaticResource引用。这个过程的第一步是找到字典的所有者;即查找Resources属性引用词典的所有对象(直接或间接通过ResourceDictionary.MergedDictionaries属性)。 System.Windows.Diagnostics.ResourceDictionaryDiagnostics类实现了三个新的静态方法,每个具有Resources属性的基类型都支持此步骤:
公共静态IEnumerable <FrameworkElement> GetFrameworkElementOwners(ResourceDictionary字典);
公共静态IEnumerable <FrameworkContentElement> GetFrameworkContentElementOwners(ResourceDictionary字典);
公共静态IEnumerable <Application> GetApplicationOwners(ResourceDictionary字典);
除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量,否则这些方法将返回空的枚举。
查找StaticResource引用
无论什么时候解决StaticResource引用,诊断助理现在都可以收到通知。 (此功能供诊断助理使用,而非生产应用程序。)Visual Studio的“编辑并继续”工具等诊断助理可能希望在ResourceDictionary中的值更改时更新资源的所有用途。 WPF为DynamicResource引用自动执行此操作,但它对静态资源引用不会这样做。从.NET Framework 4.7.2开始,诊断助理可以使用这些通知来查找这些静态资源的用途。
通知由新的ResourceDictionaryDiagnostics.StaticResourceResolved事件实现:
C#
公共静态事件EventHandler <StaticResourceResolvedEventArgs> StaticResourceResolved;
只要运行时解析了StaticResource引用,就会引发此事件。 StaticResourceResolvedEventArgs参数描述分辨率,并指出承载StaticResource引用的对象和属性以及用于解决方案的ResourceDictionary和密钥:
C#
公共类StaticResourceResolvedEventArgs:EventArgs
{
public Object TargetObject {get; }
public Object TargetProperty {get; }
public ResourceDictionary ResourceDictionary {get; }
公共对象ResourceKey {get; }
}
除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量,否则不会引发该事件(并且忽略其addor访问器)。
的ClickOnce
Windows Forms,Windows Presentation Foundation(WPF)和Visual Studio Tools for Office(VSTO)的支持HDPI的应用程序都可以使用ClickOnce进行部署。如果在应用程序清单中找到以下条目,则在.NET Framework 4.7.2下部署将会成功:
XML
<windowsSettings>
<dpiAware xmlns =“http://schemas.microsoft.com/SMI/2005/WindowsSettings”> true </ dpiAware>
</ windowsSettings>
对于Windows窗体应用程序,在应用程序配置文件而不是应用程序清单中设置DPI感知的以前解决方法不再需要ClickOnce部署成功。
Microsoft .NET Framework 4.7.2是一款由微软官方推出的最新版本,新版最大的改进就是支持Azure Active Directory的通用和多重身份验证(MFA,Multi-factor authentication),同时兼容.NET 4.6、4.5及以下多个版本,兼容性良好,离线安装包可以在无网络的情况下载安装使用,欢迎有需要此款工具的朋友们前来下载使用。
Microsoft .NET Framework 4.7.2介绍
Microsoft .NET Framework 4.7.2是与.NET Framework 4,4.5,4.5.1,4.5.2,4.6,4.6.1,4.6.2,4.7和4.7.1高度兼容的就地更新。
离线软件包可用于由于缺乏互联网连接而无法使用网络安装程序的情况。该软件包比Web安装程序更大,并且不包含语言包。我们建议您使用Web安装程序而不是脱机安装程序来获得最佳效率和带宽要求。
Microsoft .NET Framework 4.7.2 Web在线安装程序:点击下载
安装此软件包时,将在您的操作系统上安装以下软件包或更新:
在Windows 7 Service Pack 1(SP1)和Windows Server 2008 R2 SP1中,.NET Framework 4.7.2在“控制面板”中的“程序和功能”项下列为已安装的产品。
在Windows Server 2012中,Microsoft Windows更新(KB4054542)在“控制面板”中的“已安装的更新”项下列出。
在Windows 8.1或Windows Server 2012 R2中,Microsoft Windows更新(KB4054566)显示在“控制面板”中的“已安装的更新”项下。
在Windows 10周年更新,Windows 10 Creators更新和Windows Server 2016中,Microsoft Windows更新(KB4054590)在“控制面板”中的“已安装更新”项下列出。
在Windows 10 Fall Creators更新中,Microsoft Windows更新(KB4073120)在“控制面板”中的“已安装更新”项下列出。
安装教程
1、在本站下载Microsoft .NET Framework 4.7.2离线安装包,并解压后,双击“NDP472-KB4054530-x86-x64-AllOS-ENU.exe”程序,等待片刻
2、勾选“我已阅读并接受许可条款”并点击安装即可
官方介绍
.NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。
.NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境。.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各应用程序之间,可以使用Web服务进行沟通。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行时(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP NET的面向Web的网络应用程序模板(Web Forms和Web Services)。
公共语言运行时(CLR),是一个运行时环境,管理代码的执行并使开发过程变得更加简单。CLR是一种受控的执行环境,其功能通过编译器与其它工具共同展现。
在CLR之上的是服务框架,它提供了一套开发人员希望在标准语言库中存在的基类库,包括集合、输入/输出、字符串及数据类。
那么,在Windows DNA(分布式集成网络应用体系结构)之后,微软提出新的.NET框架(新托管代码编程模型)的主要原因是什么?
问题出现在已开发了多种技术的整合的一个单一应用程序的子系统上。例如,一个制造企业有不同的系统,如库存管理系统,物料清单系统,财务总帐系统,所有使用可用于应用程序开发的各种技术实现的。这些系统需要集成在一起,从而形成一个更高级别的企业信息系统的组织。要做到这一点,应用程序开发人员必须使用如微 软的分布式组件对象模型(DCOM),通用对象请求代理体系结构(CORBA),Java远程方法调用(RMI)等技术。然而,这些分布的技术通过已开发的应用程序编程语言非常紧密地耦合在一起。
跨语言的互操作性也是受限的。例如,如果在Visual C++类已经被创建,那么不可能在Visual Basic开发新的类并将其扩展到Visual C++。因此,开发者将不得不用每一种项目中用到的语言重新编写同样的逻辑的类。功能的可重用性得到了支持,但在早期的技术,真正的代码的可重用性是不可用。因此,开发人员不得不学习被用于应用程序的开发组织用到的所有语言。注册的COM组件。COM组件注册,才可以在目标机器上使用的应用程序。应用程序必须查找Windows注册表中查找并加载的COM组件。
.NET Framework 4.7.2新功能
ADO.NET
最大的改进就是支持Azure Active Directory的通用和多重身份验证(MFA,Multi-factor authentication)。此外,预览版中还修正了大量的驱动缺陷,例如XEvents丢失、SqlBulkCopy的可靠性问题等。
ASP.NET
ASP.NET中的主要改进是支持Page、Custom Handler和User Control的依赖注入。但是这些改进将如何影响设计模式和能力,具体的细节尚未公布。
另一个特性是可以控制cookies中SameSite属性。以前只能使用URL重写规则设置SameSite。
基类库(BCL,Base Class Library)
HashSet得到了大量关注,其改进包括在性能和内存占用上的改进、一种指定其默认容量的方式、TryGetValue方法,以及用于LINQ支持的ToHashSet扩展方法。
ConcurrentDictionary的性能也得到了改进,并给出了新的GetOrAdd和AddOrUpdate方法重载。
使用.NET Core给出的代码,ReaderWriterLockSlim通过降低写饥饿(writer starvation)的可能性和避免唤醒多个写,实现对竞争问题的更好处理。
此外还有其它一些小的性能改进,涉及DateTime、文件和目录的枚举、TextInfo、Comparer/EqualityComparer.Default、Buffer和ManualResetEventSlim。
CLR
就特性而言改进很少,但是预览版中包含了不少提高可靠性的修补程序,涉及代码生成、垃圾回收和错误恢复和报告等方面。
ClickOnce
现在支持在ClickOnce部署配置文件中启用高DPI。高DPI支持对于高分辨率显示器是必需的特性。Narrator作为一种重要的无障碍工具,现在可以和ClickOnce安装程序一起正常工作。
网络特性
对Uri、HttpClient、SmtpClient、Socket和WebSocket做了重大修正,但是没有给出新的特性。
WCF
用于诊断WCF问题的SvcTraceViewer工具在UI上做了改进,“更合乎逻辑”。其与SvcConfigEditor工具都做了改进,意在符合无障碍标准。
Windows Forms
在此次预览版中,修正了一些长期存在的软件缺陷,例如DataGridView.Dispose抛出NullReferenceException异常(编者按:希望这正是我在2008年曾报告过的缺陷)。令人惊喜的是,DataGridView具有了一项新特性,即可使用F3可更新表中的排序顺序。
更重要的是,该预览版在无障碍问题做了大量的工作,例如用于工具条的键盘无障碍支持。但是应用如果要完全使用这些改进,必须使用.NET Framework 4.7.2重新编译。
Windows Workflow
只给出了一些可靠性上的修正,并未提供新的特性。
WPF
只做了一些软件缺陷的修正,涉及内存泄漏、数据损害和崩溃等。
更新日志:
.NET Framework 4.7.2中的新增功能
.NET Framework 4.7.2包含以下几个方面的新功能:
核心
ASP.NET
联网
SQL
WPF
的ClickOnce
.NET Framework 4.7.2的持续关注点在于提高了可访问性,这使得应用程序可以为辅助技术的用户提供适当的体验。有关.NET Framework 4.7.2中的辅助功能改进的信息,请参阅.NET Framework中的辅助功能的新增功能。
核心
.NET Framework 4.7.2具有大量的加密增强功能,更好的ZIP压缩解压缩支持和其他收集API。
RSA.Create和DSA.Create的新重载
DSA.Create(DSAParameters)和RSA.Create(RSAParameters)方法让您在实例化新的DSA或RSA密钥时提供关键参数。它们允许您替换如下代码:
C#
//在.NET Framework 4.7.2之前
使用(RSA rsa = RSA.Create())
{
rsa.ImportParameters(rsaParameters);
//使用RSA实例执行的其他代码。
}
与这样的代码:
C#
//从.NET Framework 4.7.2开始
使用(RSA rsa = RSA.Create(rsaParameters))
{
//使用rsa实例执行的其他代码。
}
使用DSA.Create(Int32)和RSA.Create(Int32)方法可以生成具有特定密钥大小的新DSA或RSA密钥。例如:
C#
使用(DSA dsa = DSA.Create(2048))
{
//使用dsa实例执行的其他代码。
}
Rfc2898DeriveBytes构造函数接受一个哈希算法名称
Rfc2898DeriveBytes类有三个带有HashAlgorithmName参数的新构造函数,用于标识派生密钥时要使用的HMAC算法。开发人员不应使用SHA-1,而应使用基于SHA-2的HMAC,如SHA-256,如以下示例所示:
C#
private static byte [] DeriveKey(字符串密码,out int迭代,out byte [] salt,
out HashAlgorithmName算法)
{
迭代= 100000;
algorithm = HashAlgorithmName.SHA256;
const int SaltSize = 32;
const int DerivedValueSize = 32;
使用(Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password,SaltSize,
迭代,算法))
{
salt = pbkdf2.Salt;
返回pbkdf2.GetBytes(DerivedValueSize);
}
}
支持临时密钥
PFX导入可以选择直接从内存加载私钥,绕过硬盘驱动器。当在X509Certificate2构造函数或X509Certificate2.Import方法的重载中指定了新的X509KeyStorageFlags.EphemeralKeySet标志时,私钥将作为临时密钥加载。这可以防止密钥在磁盘上可见。然而:
由于密钥没有保存到磁盘,因此使用此标志加载的证书不适合添加到X509Store。
以这种方式加载的密钥几乎总是通过Windows CNG加载。因此,调用者必须通过调用扩展方法(如cert.GetRSAPrivateKey())来访问私钥。 X509Certificate2.PrivateKey属性不起作用。
由于旧版X509Certificate2.PrivateKey属性不适用于证书,因此开发人员在切换到临时密钥之前应执行严格的测试。
编程创建PKCS#10认证签名请求和X.509公钥证书
从.NET Framework 4.7.2开始,工作负载可以生成证书签名请求(CSR),该请求允许将证书请求生成分级到现有工具中。这在测试场景中通常很有用。
有关更多信息和代码示例,请参阅.NET博客中的“编程创建PKCS#10认证签名请求和X.509公钥证书”。
新的SignerInfo成员
从.NET Framework 4.7.2开始,SignerInfo类公开了有关签名的更多信息。您可以检索System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm属性的值以确定签名者使用的签名算法。可以调用SignerInfo.GetSignature来获取签名者的加密签名的副本。
处理CryptoStream后,保留打开的流
从.NET Framework 4.7.2开始,CryptoStream类有一个额外的构造函数,允许Dispose不关闭包装流。在处理CryptoStream实例后,要打开包装流,请按如下所示调用新的CryptoStream构造函数:
C#
var cStream = new CryptoStream(stream,transform,mode,leaveOpen:true);
DeflateStream中的解压缩更改
从.NET Framework 4.7.2开始,默认情况下,DeflateStream类中的解压缩操作的实现已更改为使用本机Windows API。通常,这会导致性能的显着改善。
默认情况下,对于面向.NET Framework 4.7.2的应用程序,支持使用Windows API进行解压缩。面向早期版本的.NET Framework但在.NET Framework 4.7.2下运行的应用程序可以通过将以下AppContext开关添加到应用程序配置文件中来选择此行为:
XML
<AppContextSwitchOverrides value =“Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression = false”/>
其他收集API
.NET Framework 4.7.2为SortedSet <T>和HashSet <T>类型添加了一些新的API。这些包括:
TryGetValue方法,它将其他集合类型中使用的try模式扩展为这两种类型。方法是:
`public bool HashSet.TryGetValue(T equalValue,out T actualValue);
`public bool SortedSet.TryGetValue(T equalValue,out T actualValue);
Enumerable.To *扩展方法,将集合转换为HashSet <T>:
公共静态HashSet ToHashSet(此IEnumerable源);
公共静态HashSet ToHashSet(此IEnumerable来源,IEqualityComparer比较器);
使用新的HashSet <T>构造函数可以设置集合的容量,当您事先知道HashSet <T>的大小时会产生性能优势:
公共HashSet(int容量)
公共HashSet(int容量,IEqualityComparer比较器)
ConcurrentDictionary <TKey,TValue>类包含AddOrUpdate和GetOrAdd方法的新重载,用于从字典中检索值或添加它(如果找不到),并向字典中添加值或在字典中已存在时更新它。
C#
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)
ASP.NET
支持Web窗体中的依赖注入
依赖注入(DI)将对象及其依赖关系解耦,以便仅仅因为依赖关系已更改而不再需要更改对象的代码。在开发面向.NET Framework 4.7.2的ASP.NET应用程序时,您可以:
在处理程序和模块,页面实例以及ASP.NET Web应用程序项目的用户控件中使用基于setter,基于接口和基于构造函数的注入。
在ASP.NET网站项目的处理程序和模块,页面实例和用户控件中使用基于setter和基于接口的注入。
插入不同的依赖注入框架。
支持同一站点的cookies
SameSite可防止浏览器随同跨站点请求一起发送cookie。 .NET Framework 4.7.2添加了一个HttpCookie.SameSite属性,其值是一个System.Web.SameSiteMode枚举成员。如果它的值是SameSiteMode.Strict或SameSiteMode.Lax,则ASP.NET会将SameSite属性添加到set-cookie标头。 SameSite支持适用于HttpCookie对象,以及FormsAuthentication和System.Web.SessionState cookie。
您可以为HttpCookie对象设置SameSite,如下所示:
C#
var c = new HttpCookie(“secureCookie”,“同源”);
c.SameSite = SameSiteMode.Lax;
您还可以通过修改web.config文件在应用程序级配置SameSite cookie:
XML
在<system.web>
<httpCookies sameSite =“严格”/>
</system.web>
您可以通过修改Web配置文件来为FormsAuthentication和System.Web.SessionState cookies添加SameSite:
XML
在<system.web>
<authentication mode =“Forms”>
<形式cookieSameSite =“Lax”>
<! - ... - >
</表格>
<认证/>
<sessionSate cookieSameSite =“Lax”> </ sessionState>
</system.web>
联网
实现HttpClientHandler属性
.NET Framework 4.7.1向System.Net.Http.HttpClientHandler类添加了八个属性。但是,两个抛出了PlatformNotSupportedException。 .NET Framework 4.7.2现在为这些属性提供了一个实现。这些属性是:
CheckCertificateRevocationList
SslProtocols
SQLCLIENT
支持Azure Active Directory通用身份验证和多因素身份验证
不断增长的合规性和安全性要求要求许多客户使用多因素认证(MFA)。另外,目前的最佳实践不鼓励直接在连接字符串中包含用户密码。为了支持这些更改,.NET Framework 4.7.2通过为现有的“Authentication”关键字添加新值“Active Directory Interactive”来扩展SQLClient连接字符串,以支持MFA和Azure AD身份验证。新的交互式方法支持本地和联合Azure AD用户以及Azure AD来宾用户。使用此方法时,SQL数据库支持由Azure AD强制实施的MFA身份验证。另外,认证过程要求用户密码遵守安全最佳实践。
在以前版本的.NET Framework中,SQL连接仅支持SqlAuthenticationMethod.ActiveDirectoryPassword和SqlAuthenticationMethod.ActiveDirectoryIntegrated选项。这两者都是非交互式ADAL协议的一部分,不支持MFA。使用新的SqlAuthenticationMethod.ActiveDirectoryInteractive选项,SQL连接支持MFA以及现有的身份验证方法(密码和集成身份验证),它允许用户以交互方式输入用户密码,而无需在连接字符串中保留密码。
有关更多信息和示例,请参阅.NET博客中的“SQL - Azure AD通用和多因素身份验证支持”。
支持始终加密版本2
NET Framework 4.7.2增加了对基于飞地的Always Encrypted的支持。 Always Encrypted的原始版本是客户端加密技术,加密密钥永远不会离开客户端。在基于飞域的始终加密中,客户端可以选择将加密密钥发送到安全飞地,这是一个安全的计算实体,可被视为SQL Server的一部分,但SQL Server代码无法篡改。要支持基于区域的始终加密,.NET Framework 4.7.2将以下类型和成员添加到System.Data.SqlClient命名空间中:
SqlConnectionStringBuilder.EnclaveAttestationUrl,它为基于飞机的总是加密指定Uri。
SqlColumnEncryptionEnclaveProvider,它是派生所有飞地提供者的抽象类。
SqlEnclaveSession,它封装了给定飞地会话的状态。
SqlEnclaveAttestationParameters,它提供SQL Server用于获取执行特定证明协议所需信息的证明参数。
应用程序配置文件然后指定提供包围提供程序功能的抽象System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider类的具体实现。例如:
XML
<结构>
<configSections>
<section name =“SqlColumnEncryptionEnclaveProviders”type =“System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”/>
</ configSections>
<SqlColumnEncryptionEnclaveProviders>
<提供商>
<add name =“Azure”type =“Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp”/>
<add name =“HGS”type =“Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp”/>
</提供商>
</ SqlColumnEncryptionEnclaveProviders>
</配置>
基于飞地的总是加密的基本流程是:
用户创建一个AlwaysEncrypted连接到SQL Server,支持基于飞地的Always Encrypted。司机联系证明服务,以确保它连接到正确的飞地。
一旦飞地被证实,驱动程序就会与SQL Server上托管的安全区域建立安全通道。
在SQL连接期间,驱动程序共享客户端授权的加密密钥和安全区域。
Windows Presentation Foundation
按源查找资源词典
从.NET Framework 4.7.2开始,诊断助理可以找到从给定源Uri创建的ResourceDictionaries。 (此功能仅供诊断助理使用,不能由生产应用程序使用。)Visual Studio的“编辑并继续”功能等诊断助理允许其用户编辑ResourceDictionary,其目的是将更改应用于正在运行的应用程序。实现这一目标的一个步骤是查找正在编辑的字典中正在运行的应用程序创建的所有ResourceDictionaries。例如,应用程序可以声明一个ResourceDictionary,其内容是从给定的源URI中复制的:
XML
<ResourceDictionary Source =“MyRD.xaml”>
在MyRD.xaml中编辑原始标记的诊断助理可以使用新功能来查找字典。该功能由一个新的静态方法ResourceDictionaryDiagnostics.GetResourceDictionariesForSource实现。诊断助理使用标识原始标记的绝对URI来调用新方法,如以下代码所示:
C#
IEnumerable <ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri(“pack:// application:,,, / MyApp; component / MyRD.xaml”));
该方法返回一个空的枚举值,除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量。
查找ResourceDictionary所有者
从.NET Framework 4.7.2开始,诊断助理可以找到给定ResourceDictionary的所有者。 (此功能仅供诊断助理使用,不供生产应用程序使用。)每当对ResourceDictionary进行更改时,WPF都会自动查找可能受更改影响的所有DynamicResource引用。
诊断助理(如Visual Studio的“编辑并继续”工具)可能希望将其扩展为处理StaticResource引用。这个过程的第一步是找到字典的所有者;即查找Resources属性引用词典的所有对象(直接或间接通过ResourceDictionary.MergedDictionaries属性)。 System.Windows.Diagnostics.ResourceDictionaryDiagnostics类实现了三个新的静态方法,每个具有Resources属性的基类型都支持此步骤:
公共静态IEnumerable <FrameworkElement> GetFrameworkElementOwners(ResourceDictionary字典);
公共静态IEnumerable <FrameworkContentElement> GetFrameworkContentElementOwners(ResourceDictionary字典);
公共静态IEnumerable <Application> GetApplicationOwners(ResourceDictionary字典);
除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量,否则这些方法将返回空的枚举。
查找StaticResource引用
无论什么时候解决StaticResource引用,诊断助理现在都可以收到通知。 (此功能供诊断助理使用,而非生产应用程序。)Visual Studio的“编辑并继续”工具等诊断助理可能希望在ResourceDictionary中的值更改时更新资源的所有用途。 WPF为DynamicResource引用自动执行此操作,但它对静态资源引用不会这样做。从.NET Framework 4.7.2开始,诊断助理可以使用这些通知来查找这些静态资源的用途。
通知由新的ResourceDictionaryDiagnostics.StaticResourceResolved事件实现:
C#
公共静态事件EventHandler <StaticResourceResolvedEventArgs> StaticResourceResolved;
只要运行时解析了StaticResource引用,就会引发此事件。 StaticResourceResolvedEventArgs参数描述分辨率,并指出承载StaticResource引用的对象和属性以及用于解决方案的ResourceDictionary和密钥:
C#
公共类StaticResourceResolvedEventArgs:EventArgs
{
public Object TargetObject {get; }
public Object TargetProperty {get; }
public ResourceDictionary ResourceDictionary {get; }
公共对象ResourceKey {get; }
}
除非启用了VisualDiagnostics并设置了ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO环境变量,否则不会引发该事件(并且忽略其addor访问器)。
的ClickOnce
Windows Forms,Windows Presentation Foundation(WPF)和Visual Studio Tools for Office(VSTO)的支持HDPI的应用程序都可以使用ClickOnce进行部署。如果在应用程序清单中找到以下条目,则在.NET Framework 4.7.2下部署将会成功:
XML
<windowsSettings>
<dpiAware xmlns =“http://schemas.microsoft.com/SMI/2005/WindowsSettings”> true </ dpiAware>
</ windowsSettings>
对于Windows窗体应用程序,在应用程序配置文件而不是应用程序清单中设置DPI感知的以前解决方法不再需要ClickOnce部署成功。