摘自http://msdn.microsoft.com/zh-cn/library/ms171868(v=VS.100).aspx
本主题包含有关 .NET Framework 4 版中的主要功能和改进的信息。此主题不提供有关所有新增功能的完整信息,并有可能会发生更改。
.NET Framework 4 引进了改进的安全模式。有关更多信息,请参见.NET Framework 4 中的安全性更改。
以下各节介绍了 .NET Framework 4 的其它新增功能和改进:
应用程序兼容性和部署
.NET Framework 4 与使用 .NET Framework 早期版本生成的应用程序有很高的兼容性,除了提高安全性、标准遵从性、正确性、可靠性和性能所做的一些更改之外。
.NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序。若要使用 .NET Framework 4 运行较早的应用程序,则必须使用 Visual Studio 中项目的属性指定的目标 .NET Framework 版本编译应用程序, 或使用应用程序配置文件中的 <supportedRuntime> 元素 可指定所支持的运行时。
如果安装 .NET Framework 4 后,您的应用程序或组件无法运行,请在 Microsoft Connect 网站上提交 bug。您可以按照 .NET Framework 4 Application Compatibility(.NET Framework 4 应用程序兼容性)主题中的描述测试兼容性,并通过 Visual Studio 2010 and .NET Framework 4 Walkthroughs(Visual Studio 2010 和 .NET Framework 4 演练)来了解新增功能。有关其他信息和已知迁移问题,请访问 .NET Framework Compatibility blog(.NET Framework 兼容性博客)。
以下各节介绍了部署改进。
Client Profile
.NET Framework 4 Client Profile 比以前版本支持更多平台,并可为 Windows Presentation Foundation (WPF)、控制台或 Windows 窗体应用程序提供更快的部署体验。有关更多信息,请参见.NET Framework Client Profile。
进程内并行执行
此功能使应用程序能够在同一个进程中加载和启动多个版本的 .NET Framework。例如,您可以运行在同一进程中加载基于 .NET Framework 2.0 SP1 的外接程序(或组件)和基于 .NET Framework 4 的外接程序的应用程序。较旧组件可继续使用 .NET Framework 的较旧版本,新组件则使用 .NET Framework 的新版本。有关更多信息,请参见 进程内并行执行。(需要深入了解)
核心新增功能和改进
以下各节介绍公共语言运行时和基类库提供的新增功能和改进。
诊断和性能
.NET Framework 的早期版本没有提供用于确定特定应用程序域是否影响其他应用程序域的方法,因为操作系统 API 和工具(例如,Windows 任务管理器)仅精确到进程级别。�� .NET Framework 4 开始,您可以获得每个应用程序域的处理器使用情况和内存使用情况估计值。
可监控各个应用程序域对 CPU 和内存的使用情况。通过托管承载 API、本机承载 API 以及 Windows 事件跟踪 (ETW),可提供应用程序域资源监控。在启用此功能后,将在进程的生存期内收集有关进程中所有应用程序域的统计信息。请参见新增的 AppDomain..::..MonitoringIsEnabled 属性。
您现在可以访问 ETW 事件以用于诊断目的,从而改进性能。有关更多信息,请参见 CLR ETW 事件和控制 .NET Framework 日志记录。另外,请参见 性能计数器和进程内并行应用程序。
System.Runtime.ExceptionServices..::..HandleProcessCorruptedStateExceptionsAttribute 特性使托管代码能够处理指示损坏进程状态的异常。
垃圾回收
.NET Framework 4 提供背景垃圾回收。此功能替代了以前版本中的并发垃圾回收并提高了性能。有关更多信息,请参见 垃圾回收的基础。
代码协定
代码协定允许您指定方法或类型的签名没有单独表示的协定信息。新的 System.Diagnostics.Contracts 命名空间包含的类可提供一种与语言无关的方式以前置条件、后置条件和对象固定的形式来表示编码假设。这些协定利用运行时检查改进了测试,启用了静态协定验证并支持文档生成。有关更多信息,请参见代码协定。
仅用于设计时的互操作程序集
您不必再提供主互操作程序集 (PIA),即可部署与 COM 对象进行交互的应用程序。在 .NET Framework 4 中,编译器可以嵌入互操作程序集中的类型信息,仅选择应用程序(如外接程序)实际使用的类型。由公共语言运行时确保类型安全。请参见在托管代码中使用 COM 类型和演练:嵌入 Microsoft Office 程序集中的类型信息(C# 和 Visual Basic)。
动态语言运行时
动态语言运行时 (DLR) 是一种新运行时环境,它将一组适用于动态语言的服务添加到 CLR。借助于 DLR,可以更轻松地开发要在 .NET Framework 上运行的动态语言,而且向静态类型化语言添加动态功能也会更容易。为了支持 DLR,在 .NET Framework 中添加了新 System.Dynamic 命名空间。
表达式树由表示控制流的新类型(如 System.Linq.Expressions..::..LoopExpression 和 System.Linq.Expressions..::..TryExpression)进行了扩展。动态语言运行时 (DLR) 将使用这些新增类型,而 LINQ 不会使用。
此外,System.Runtime.CompilerServices 命名空间中还添加了多个支持 .NET Framework 基础结构的新类。有关更多信息,请参见动态语言运行时概述。
协变和逆变
现在,有多个泛型接口和委托支持协变和逆变。有关更多信息,请参见泛型中的协变和逆变。
BigInteger 和复数
新的 System.Numerics..::..BigInteger 结构是一个任意精度 Integer 数据类型,它支持所有标准整数运算(包括位操作)。可以通过任何 .NET Framework 语言使用该结构。此外,一些新 .NET Framework 语言(例如 F# 和 IronPython)对此结构具有内置支持。
新的 System.Numerics..::..Complex 结构表示一个复数,它支持使用复数的算术运算和三角运算。
元组
.NET Framework 4 提供了用于创建包含结构化数据的元组对象的 System..::..Tuple 类。它还提供了泛型元组类以支持具有 1 到 8 个组件的元组(即,从单一实例到八元组)。为了支持具有 9 个或更多组件的元组对象,提供了一个具有 7 个类型参数和任何元组类型的第 8 个参数的泛型元组类。
文件系统枚举改进
新的文件枚举方法可以提高访问大文件目录或循环访问大文件中的行的应用程序的性能。有关更多信息,请参见如何:枚举目录和文件。
内存映射文件
.NET Framework 现在支持内存映射文件。可以使用内存映射文件编辑非常大的文件和创建共享内存以进行进程间通信。
64 位操作系统和进程
使用 Environment..::..Is64BitOperatingSystem 和 Environment..::..Is64BitProcess 属性可以标识 64 位操作系统和进程。
打开基项时,可以使用 Microsoft.Win32..::..RegistryView 枚举指定 32 位或 64 位注册表视图。
其他新增功能
以下列表介绍其他新增功能、改进和便利。其中的几个功能是根据客户建议增加的。
- 为了支持区分区域性的格式设置,System..::..TimeSpan 结构包含了 ToString、Parse 和 TryParse 方法的新重载,以及新的 ParseExact 和 TryParseExact 方法。
- 新的 String..::..IsNullOrWhiteSpace 方法指示字符串是否为 null、为空或仅包含空白字符。已向 String.Concat 和 String.Join 方法添加了可以连接 System.Collections.Generic..::..IEnumerable<(Of <(<'T>)>)> 集合的成员的新重载。
- 您可以使用 String..::..Concat 方法将可枚举集合中的每个元素连接在一起,而无需先将元素转换成字符串。
- 可以使用的两种新的简便方法是:StringBuilder..::..Clear 和 Stopwatch..::..Restart。
- 新的 Enum..::..HasFlag 方法确定在某个枚举值中是否设置了一个或多个位域或标志。Enum..::..TryParse 方法返回一个布尔值,指示能否成功分析字符串或整数值。
- System..::..Environment..::..SpecialFolder 枚举包含多个新文件夹。
- 现在可以使用从 System.IO..::..Stream 类继承的类中的 CopyTo 方法轻松地将一个流复制到另一个流中。
- 使用新的 Path..::..Combine 方法重载可组合文件路径。
- 新的 System..::..IObservable<(Of <(<'T>)>)> 和 System..::..IObserver<(Of <(<'T>)>)> 接口为基于推送的通知提供通用机制。
- System..::..IntPtr 和 System..::..UIntPtr 类现在包括对加法运算符和减法运算符的支持。
- 现在可以通过将类型包装在 System..::..Lazy<(Of <(<'T>)>)> 类内部,为任何自定义类型启用迟缓初始化。
- 新的 System.Collections.Generic..::..SortedSet<(Of <(<'T>)>)> 类提供了一个按插入、删除和搜索后的排序顺序维护数据的自平衡树。此类可实现新的 System.Collections.Generic..::..ISet<(Of <(<'T>)>)> 接口。
- System.IO.Compression..::..DeflateStream 和 System.IO.Compression..::..GZipStream 类的压缩算法得到了改进,以便不再扩充已压缩的数据。此外,还移除了压缩流的 4 GB 大小限制。
- 新的 Monitor..::..Enter(Object, Boolean%) 方法重载采用布尔值引用,并仅在成功进入监视器时才自动将其设置为 true。
- 可以使用 Thread..::..Yield 方法让调用线程执行准备好在当前处理器上运行的另一个线程。
- System..::..Guid 结构现在包含 TryParse 和 TryParseExact 方法。
- 新的 Microsoft.Win32..::..RegistryOptions 枚举可用于指定计算机重新启动后不保留的可变注册表项。
- 注册表项不再受限于 255 个字符的最大长度。
Managed Extensibility Framework
Managed Extensibility Framework (MEF) 是 .NET Framework 4 中的一个新库,可帮助您生成可扩展和可组合的应用程序。使用 MEF 可指定可以扩展应用程序的位置,公开要提供给其他可扩展应用程序的服务并创建供可扩展应用程序使用的部件。MEF 还可以基于元数据启用可用部件的便捷发现功能,而无需加载部件的程序集。有关更多信息,请参见 Managed Extensibility Framework。有关 MEF 类型的列表,请参见 System.ComponentModel.Composition 命名空间。
并行计算
.NET Framework 4 引入了用于编写多线程和异步代码的新编程模型,极大地简化了应用程序和库开发人员的工作。该新模型使开发人员可以通过固有方法编写高效、细化且可伸缩的并行代码,而不必直接处理线程或线程池。新的 System.Threading.Tasks 命名空间和其他相关类型支持此新模型。并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现,能够通过声明性语法实现类似功能。有关更多信息,请参见 .NET Framework 中的并行编程。
网络
网络改进包含以下几个方面:
- 若干类中对于 Windows 身份验证的安全改进,包括 System.Net..::..HttpWebRequest、System.Net..::..HttpListener、System.Net.Mail..::..SmtpClient、System.Net.Security..::..SslStream 和 System.Net.Security..::..NegotiateStream。对于 Windows 7 和 Windows Server 2008 R2 上的应用程序提供了扩展保护。有关更多信息,请参见使用扩展保护的 Windows 集成身份验证。
- 支持使用 IPv6 或 Teredo 的网络地址转换 (NAT) 遍历。有关更多信息,请参见使用 IPv6 和 Teredo 的 NAT 遍历。
- 提供有关 HttpWebRequest 对象的信息的新的网络性能计数器。有关更多信息,请参见联网性能计数器。
- 在 System.Net..::..HttpWebRequest 类中,支持在 AddRange 方法的新重载中使用大字节范围标头(64 位范围)。System.Net..::..HttpWebRequest 类的新属性允许应用程序设置很多 HTTP 标头。可使用 Host 属性设置 HTTP 请求中独立于请求 URI 的 Host 标头值。
- 对于 System.Net.Mail..::..SmtpClient 和相关类的安全套接字层 (SSL) 支持。
- 改进了对 System.Net.Mail..::..MailMessage 类中的邮件标头的支持。
- 对在加密中使用 null 密码的支持。可以通过使用 System.Net..::..ServicePointManager 类和 EncryptionPolicy 属性指定加密策略。System.Net.Security..::..SslStream 类的构造函数现在采用 System.Net.Security..::..EncryptionPolicy 类作为参数。
- System.Net..::..NetworkCredential 类中提供了用于基于密码的身份验证方案(例如基本、摘要、NTLM 和 Kerberos 身份验证)的凭据。为了提高安全性,现在可将密码视为 System.Security..::..SecureString 实例而不是 System..::..String 实例。
- 在 System..::..Uri 和 System.Net..::..HttpListener 类中指定如何转换和规范化使用百分号编码值的 URI 能力。有关更多信息,请参见 System.Net.Configuration..::..HttpListenerElement、System.Configuration..::..SchemeSettingElement、System.Configuration..::..SchemeSettingElementCollection 和 System.Configuration..::..UriSection 类。
网页
ASP.NET 4 版在以下几个方面引入了新功能:
- 核心服务,包括可用来扩展缓存的新 API、支持对会话状态的数据进行压缩以及新的应用程序预加载管理器(自动启动功能)。
- Web 窗体,包括对 ASP.NET 路由的更集中化支持、对 Web 标准的增强支持、更新的浏览器支持、数据控件的新功能以及视图状态管理的新功能。
- Web 窗体控件,包括新的 Chart 控件。
- MVC,包括视图的新帮助器方法、对分区的 MVC 应用程序的支持以及异步控制器。
- 动态数据,包括对现有 Web 应用程序的支持、对多对多关系和继承的支持、新的字段模板和特性以及增强的数据筛选。
- Microsoft Ajax,包括对 Microsoft Ajax 库中的基于客户端的 Ajax 应用程序的附加支持。
- Visual Web Developer,包括改进的 JScript IntelliSense、针对 HTML 和 ASP.NET 标记的新的自动完成代码段和增强的 CSS 兼容性。
- 部署,包括用于自动化典型部署任务的新工具。
- 多目标,包括针对目标版本的 .NET Framework 中未提供的功能的更好的筛选功能。
有关这些功能的更多信息,请参见 ASP.NET 4 和 Visual Web Developer 中的新增功能。
客户端
Windows Presentation Foundation
在 .NET Framework 4 中,Windows Presentation Foundation (WPF) 包含很多方面(包括控件、图形和 XAML)的更改和改进。 有关更多信息,请参见 WPF 版本 4 的新增功能。
数据
ADO.NET
ADO.NET 为 Entity Framework 提供了新增功能,包括持久性透明对象、LINQ 查询中的功能以及自定义对象层代码生成。有关更多信息,请参见 ADO.NET 中的新增功能。
动态数据
ASP.NET 4 的动态数据得到了增强,为您提供快速生成数据驱动网站的更强大功能。这包括:
- 基于数据模型中定义的约束的自动验证。
- 可以使用属于动态数据项目一部分的字段模板轻松更改为 GridView 和 DetailsView 控件中的字段生成的标记。
有关更多信息,请参见 ASP.NET 4 和 Visual Web Developer 中的新增功能。
通信和工作流
Windows Presentation Foundation (WPF) 提供了消息增强以及与 Windows Workflow Foundation (WF) 的无缝集成。WF 在性能、可伸缩性、工作流建模方面进行了改进,并提供了一个更新的可视化设计器。有关更多信息,请参见 What's New in Windows Communication Foundation和 What's New in Windows Workflow Foundation。