.NET Framework 3.5 版中的新增功能

更新:2007 年 11 月

本主题包含有关 .NET Framework 3.5 版 中的新功能和增强功能的信息。

.NET Compact Framework

.NET Compact Framework 3.5 版 通过包含 Windows Communication Foundation (WCF) 技术扩展了对分布式移动应用程序的支持。它还添加了新的语言功能(如 LINQ)和基于社区反馈的新 API,并使用更新的诊断工具和功能来改进调试。

有关这些新功能和增强功能的详细信息,请参见 .NET Compact Framework 3.5 版中的新增功能

ASP.NET

.NET Framework 3.5 针对 ASP.NET 和 Visual Web Developer 中的特定方面提供了增强功能。最重要的改进在于,改进了对支持 AJAX 的网站的开发支持。ASP.NET 支持使用一组新的服务器控件和 API 进行以服务器为中心的 AJAX 开发。通过添加 ScriptManager 控件和 UpdatePanel 控件,可以让现有 ASP.NET 2.0 页面支持 AJAX 功能,这样更新页面时将无需整页刷新。

ASP.NET 还支持使用名为 Microsoft AJAX Library 的新客户端库进行以客户端为中心的 AJAX 开发。Microsoft AJAX Library 支持以客户端为中心、面向对象且独立于浏览器的开发。借助 ECMAScript (JavaScript) 中的库类,可以提供丰富的 UI 行为,而无需反复访问服务器。您可以根据应用程序的需要,调整以服务器为中心和以客户端为中心这两种开发模式的比例。此外,Visual Web Developer 还包括改进的对 JavaScript 的 IntelliSense 支持和对 Microsoft AJAX Library 的支持。

现在,ASP.NET 和 Visual Web Developer 支持创建基于 ASMX 和 WCF 的 Web 服务,还支持在采用了 Microsoft AJAX Library 的网页中无缝使用任一实现。此外,包括 Forms 身份验证、角色管理和配置文件的服务器端应用程序服务现已作为 Web 服务公开,这些服务可以在 WCF 兼容应用程序(包括客户端脚本和 Window 窗体客户端)中使用。ASP.NET 允许所有的基于 Web 的应用程序共享这些公共应用程序服务。

ASP.NET 中的其他改进包括:用于显示数据的新数据控件 ListView;通过 ASP.NET 数据源控件结构向 Web 开发人员公开语言集成查询 (LINQ) 的新数据源控件 LinqDataSource;用于合并预编译程序集的新工具 ASP.NET 合并工具 (Aspnet_merge.exe);与 IIS 7.0 的紧密集成。ListView 是一个可高度自定义的控件(使用模板和样式),该控件还支持编辑、插入和删除操作以及排序和分页功能。一个名为 DataPager 的新控件为 ListView 提供了分页功能。可以使用合并工具来合并程序集以支持各种部署和发布管理方案。ASP.NET 和 IIS 7.0 的集成提供了对任何内容类型使用 ASP.NET 服务(如身份验证和缓存)的能力,还提供了使用 ASP.NET 托管代码开发服务器管线模块的能力,并且支持模块和处理程序的统一配置。

Visual Web Developer 中的其他改进包括:多目标支持、包含 Web 应用程序项目、新的“设计”视图、新的级联样式表 (CSS) 设计工具以及对 LINQ for SQL 数据库的支持。多目标功能使您能够使用 Visual Web Developer 针对特定的 .NET Framework 版本(包括 2.0、3.0 和 3.5 版)开发 Web 应用程序。

有关更多信息,请参见 ASP.NET 和 Web 开发新增功能

外接程序和扩展性

.NET Framework 3.5 中的 System.AddIn.dll 程序集向可扩展应用程序的开发人员提供了强大而灵活的支持。它引入了新的结构和模型,可帮助开发人员完成向应用程序添加扩展性的初始工作,并确保开发人员的扩展在宿主应用程序发生更改时仍可继续工作。该模型提供了以下功能:

  • 发现

    使用 AddInStore 类可以很容易地在计算机上的多个位置中查找和管理外接程序集。可以使用此类来按照外接程序的基类型搜索和获取有关它们的信息,而不必加载它们。

  • 激活

    使用 AddInToken 类可以轻松地激活应用程序选中的外接程序。只需选择隔离和沙盒级别,系统就会完成剩余的工作。

  • 隔离

    提供了对应用程序域和外接程序的进程隔离的内置支持。每个外接程序的隔离级别由宿主控制。系统将处理应用程序域和进程的加载,并在这些域和进程的外接程序停止运行后关闭它们。

  • 沙盒

    可以轻松地将外接程序配置为具有默认信任级别或自定义信任级别。提供的支持包括 Internet、Intranet、完全信任和“与宿主相同”权限集,以及让宿主指定自定义权限集的重载。

  • UI 构成

    外接程序模型支持直接构成跨应用程序域边界的 Windows Presentation Foundation (WPF) 控件。可以轻松地允许外接程序直接构成宿主的 UI,同时保留隔离、卸载能力、沙盒和版本控制的好处。

  • 版本控制

    外接程序结构使宿主可以引入新版本的宿主对象模型,而不中断现有外接程序或不影响开发人员对新版本的体验。

有关更多信息,请参见外接程序和扩展性

公共语言运行时

集合

HashSet<T> 提供对 .NET Framework 的高性能集合运算。集合是一组不重复出现且无特定顺序的元素。有关更多信息,请参见 HashSet 集合类型

诊断

EventSchemaTraceListener 类提供端到端、符合架构的事件的跟踪。可以对包含跨线程、AppDomain、进程和计算机边界的异类组件的系统使用端到端跟踪。已定义一个标准化事件架构来启用跨这些边界的跟踪,请参见 Event Representation for Event Consumers(事件使用者的事件表示形式)。此架构由多种跟踪技术共享,其中包括类似事件查看器这样的 Windows Vista 诊断工具。该架构还可支持添加符合架构的自定义元素。

EventSchemaTraceListener 类已针对日志记录性能进行了调整,现在隐式支持无锁定的跟踪。

I/O 和管道

管道提供在同一台计算机上或网络中任意其他 Windows 计算机上运行的任何进程之间的进程间通信。.NET Framework 提供对两种类型的管道的访问:匿名管道和命名管道。有关管道的更多信息,请参见管道

垃圾回收

GCSettings 类具有一个新的 LatencyMode 属性,可用来调整垃圾回收器侵入应用程序的时间。可以将此属性设置为新的 GCLatencyMode 枚举值之一。

GC 类具有一个新的 Collect(Int32, GCCollectionMode) 方法重载,可用来调整强制垃圾回收的行为。例如,可以使用此重载来指定垃圾回收器应确定当前时间是否为回收对象的最佳时间。此重载采用新的 GCCollectionMode 枚举中的值。

部分信任环境中的反射和反射发出

现在,在部分信任下运行的程序集可以发出并执行代码。已发出的只调用公共类型和方法的代码不需要超出所访问的类型和方法要求的权限。使用新的 DynamicMethod(String, Type, array<Type[]) 构造函数可以很容易地发出类似的代码。

当发出的代码需要访问私有数据时,新的 DynamicMethod(String, Type, array<Type[], Boolean) 构造函数将允许进行受限制的访问。宿主必须授予 ReflectionPermission 新的 RestrictedMemberAccess 标志以启用此功能,这使发出的代码能够访问私有数据,但仅对具有等于或小于信任级别的程序集中的类型和方法适用。请参见演练:从部分信任的方案中发出代码

对于反射,授予 RestrictedMemberAccess 的宿主同样允许受限制地使用用来访问私有属性、调用私有方法等的方法,但仅对具有等于或小于信任级别的程序集适用。

线程处理

更好的读取器/编写器锁

新的 ReaderWriterLockSlim 类提供明显优于 ReaderWriterLock 的性能,可与 lock 语句相当(在 Visual Basic 中为 SyncLock)。锁定状态之间的转换已得到简化,从而使编程更容易并减少发生死锁的几率。新类支持递归,可简化从 lock 和 ReaderWriterLock 的迁移。

ThreadPool 性能增强

显著提高了在托管线程池中调度工作项和 I/O 任务的吞吐量。现在,调度可在托管代码中进行处理,而无需转换到非托管代码,并且具有较少的锁。建议对特定于应用程序的线程池实现使用 ThreadPool

时区改进

两种新的类型 DateTimeOffsetTimeZoneInfo 改进了对时区的支持,可以更容易地开发使用不同时区中的日期和时间的应用程序。有关在特定情况下要使用哪种类型的讨论,请参见在 DateTime、DateTimeOffset 和 TimeZoneInfo 之间进行选择

TimeZoneInfo

新的 TimeZoneInfo 类在很大程度上取代了现有的 TimeZone 类。可以使用 TimeZoneInfo 来检索注册表中定义的任何时区,而不仅仅是本地时区和协调世界时 (UTC)。还可以使用此类来定义自定义时区、序列化和反序列化自定义时区数据以及在时区之间转换时间。有关开发使用 TimeZoneInfo 类的应用程序的更多信息,请参见时间和时区

DateTimeOffset

新的 DateTimeOffset 结构对 DateTime 结构进行了扩展,可以更容易地使用跨时区的时间。DateTimeOffset 结构将时间和日期信息存储为一个 UTC 日期和时间以及一个指示该时间与 UTC 之差的偏移量值。

加密

ClickOnce 清单

新增了一些密码类,用于验证和获取有关 ClickOnce 应用程序的清单签名的信息。当使用 ManifestSignatureInformation 类的 VerifySignature 方法重载时,可获取有关清单签名的信息。可以使用 ManifestKinds 枚举来指定要验证的清单。验证的结果为 SignatureVerificationResult 枚举值之一。ManifestSignatureInformationCollection 提供已验证签名的 ManifestSignatureInformation 对象的只读集合。此外,下面的类提供了特定的签名信息:

Suite B 支持

.NET Framework 3.5 支持由美国国家安全机构 (NSA) 发布的 Suite B 加密算法集。有关 NSA 文档,请参见 www.nsa.gov/ia/industry/crypto_suite_b.cfm

包括以下算法:

  • 使用 128 位和 256 位的密钥大小进行加密的高级加密标准 (AES)。

  • 用于哈希处理的安全哈希算法(SHA-256 和 SHA-384)。

  • 使用 256 位和 384 位素模曲线进行签名的椭圆曲线数字签名算法 (ECDSA)。此算法由 ECDsaCng 类提供。该算法允许使用私钥进行签名并使用公钥进行验证。

  • 对密钥交换/机密协议使用 256 位和 384 位素模曲线的椭圆曲线 Diffie-Hellman (ECDH)。此算法由 ECDiffieHellmanCng 类提供。

新的 AesCryptoServiceProviderSHA256CryptoServiceProviderSHA384CryptoServiceProvider 类可以提供 AES、SHA-256 和 SHA-384 实现的美国联邦信息处理标准 (FIPS) 认证实现的托管代码包装。

下一代加密技术 (CNG) 类提供了本机 Crypto API (CAPI) 的托管实现。这一组的核心是 CngKey 密钥容器类,该类提供了 CNG 密钥的存储和使用抽象。利用该类,可以安全地存储密钥对或公钥,并使用简单的字符串名称对其进行引用。ECDsaCngECDiffieHellmanCng 类使用 CngKey 对象。

CngKey 类可用于执行其他各种操作,包括打开、创建、删除和导出密钥。它还提供对直接调用本机 API 时要使用的基础密钥句柄的访问。

提供了各种支持 CNG 的类,例如,用于维护密钥存储提供程序的 CngProvider、用于维护 CNG 算法的 CngAlgorithm 以及用于维护常用的密钥属性的 CngProperty

网络

对等网络

对等网络是一种无服务器网络技术,允许若干个网络设备相互之间共享资源和直接通信。System.Net.PeerToPeer 命名空间提供了一组支持对等名称解析协议 (PNRP) 的类,此协议允许通过在对等群中注册的 PeerName 对象发现其他的对等节点。PNRP 可以将对等名称解析为 IPv6 或 IPv4 IP 地址。

使用对等网络的协作

System.Net.PeerToPeer.Collaboration 命名空间提供了一组支持使用对等网络基础结构的协作的类。这些类简化了应用程序执行以下操作的过程:

  • 在不使用服务器的情况下跟踪对等方状态。

  • 向参与者发送邀请。

  • 发现同一子网或局域网中的对等方。

  • 管理联系人。

  • 与对等方交互。

Microsoft 的对等协作基础结构为协作性无服务器活动提供了一个基于对等网络的框架。通过使用此框架,分散的网络应用程序可以使用子网或 Internet 中的计算机的协作能力。这些类型的应用程序可用于如下类似的活动:协作计划、通信、内容分发,或者甚至多个玩家参与的游戏比赛。

套接字性能增强

Socket 类得到了增强,以供使用异步网络 I/O 来获得最高性能的应用程序使用。一系列新类已经作为增强功能集的一部分添加到了 Socket 命名空间中。这些类提供了可由专用的高性能套接字应用程序使用的可选异步模式。这些增强功能是专为需要高性能的网络服务器应用程序而设计的。

Windows Communication Foundation

WCF 和 WF 集成 — 工作流服务

.NET Framework 3.5 统一了 Windows Workflow Foundation (WF) 和 Windows Communication Foundation (WCF) 框架,以便可以使用 WF 作为一种创作 WCF 服务的方式或将现有 WF 工作流作为服务公开。这样就可以创建具有以下特点的服务:可以保持,可以轻松地向工作流传入或传出数据,并且可以强制实施应用程序级协议。有关更多信息,请参见创建工作流服务和持久性服务。有关代码示例,请参见工作流服务示例

持久性服务

.NET Framework 3.5 还引入了对 WCF 服务的支持,这些服务使用 WF 持久模型来保存服务的状态信息。这些持久性服务将其状态信息保存在应用程序层上,以便在取消然后重新创建会话时,可以从持久存储区中重新加载该服务的状态信息。有关更多信息,请参见创建工作流服务和持久性服务。有关代码示例,请参见持久性服务示例

WCF Web 编程模型

WCF Web 编程模型使开发人员可以使用 WCF 来生成 Web 风格的服务。Web 编程模型包括丰富的 URI 处理功能、对包括 GET 在内的所有 HTTP 谓词的支持以及一个简单的编程模型。该编程模型可以处理各种消息格式,包括 XML、JSON 和不透明度二进制流。有关更多信息,请参见 Web 编程模型。有关代码示例,请参见 Web 编程模型示例

WCF 整合

WCF 现在包含一个强类型对象模型,可用于处理整合源,包括 Atom 1.0 和 RSS 2.0 格式。有关更多信息,请参见 WCF 联合。有关代码示例,请参见联合示例

WCF 和部分信任

在 .NET Framework 3.5 中,在减少的权限下运行的应用程序可以使用 WCF 功能的有限子集。在 ASP.NET 中等信任权限下运行的服务器应用程序可以使用 WCF 服务模型来创建基本 HTTP 服务。在 Internet 区域权限下运行的客户端应用程序(如 XAML 浏览器应用程序或使用 ClickOnce 部署的未签名的应用程序)可以使用 WCF 代理来使用 HTTP 服务。此外,WCF Web 编程模型功能(包括 AJAX 和整合)可供部分信任的应用程序使用。有关更多信息,请参见部分信任。有关代码示例,请参见部分信任 WCF 示例

WCF 和 ASP.NET AJAX 集成

WCF 与 ASP.NET 中的异步 JavaScript 和 XML (AJAX) 功能的集成提供了一个端对端的编程模型,可用于构建可以使用 WCF 服务的 Web 应用程序。在 AJAX 样式的 Web 应用程序中,客户端(例如,Web 应用程序中的浏览器)通过使用异步请求来与服务器交换少量的数据。在 ASP.NET 中集成 AJAX 功能可提供一种生成 WCF Web 服务的简单方法,通过使用浏览器中的客户端 JavaScript 可以访问这些服务。有关更多信息,请参见 AJAX 集成和 JSON 支持。有关代码示例,请参见 AJAX 示例

Web 服务互操作性

在 .NET Framework 3.5 中,Microsoft 遵守了有关互操作性和公共标准的承诺,引入了对新的安全、可靠和事务化 Web 服务标准的支持:

通过使用新的标准绑定 <ws2007HttpBinding><ws2007FederationHttpBinding>(在 Web 服务协议互操作性指南中介绍),可以使用这些协议的实现。有关代码示例,请参见 WS 绑定示例

Windows Presentation Foundation

在 .NET Framework 3.5 中,Windows Presentation Foundation 包含多个方面的更改和改进,其中包括版本控制、应用程序模型、数据绑定、控件、文档、批注和三维 UI 元素。

有关这些新功能和增强功能的详细信息,请参见 Windows Presentation Foundation 3.5 版中的新增功能

Windows Workflow Foundation

WCF 和 WF 集成 — 工作流服务

.NET Framework 3.5 统一了 Windows Workflow Foundation (WF) 和 Windows Communication Foundation (WF) 框架,以便可以使用 WF 作为一种创作 WCF 服务的方式或将现有 WF 工作流作为服务公开。这样就可以创建具有以下特点的服务:可以保持,可以轻松地向工作流传入或传出数据,并且可以强制实施应用程序级协议。有关更多信息,请参见创建工作流服务和持久性服务。有关代码示例,请参见工作流服务示例 (WF)

规则

现在,WF 规则引擎支持扩展方法、运算符重载和在规则中使用新的运算符。有关更多信息,请参见 .NET Framework 3.5 中的规则改动。有关代码示例,请参见“规则和条件”示例

Windows 窗体

ClickOnce 改进

已经对 ClickOnce 进行了一些改进。这些改进包括从多个位置进行部署和第三方署名。有关更多信息,请参见部署 ClickOnce 应用程序而无需重新签名创建供其他人部署的 ClickOnce 应用程序

更新了 .NET Framework 3.5 的 Mage.exe 工具,该工具有时与 ClickOnce 一起使用。有关更多信息,请参见清单生成和编辑工具 (Mage.exe)

身份验证、角色和设置服务

客户端应用程序服务是 .NET Framework 3.5 中的新增功能,这些服务使基于 Windows 的应用程序(包括 Windows 窗体和 Windows Presentation Foundation 应用程序)可以方便地访问 ASP.NET 登录、角色和配置文件服务。通过这些服务,可以对用户进行身份验证,并且可以从共享服务器中检索用户角色和应用程序设置。

通过在应用程序配置文件中或在 Visual Studio 项目设计器中指定和配置客户端服务提供程序,可以启用客户端应用程序服务。这些提供程序插入到 Web 扩展性模型中,使您可以通过现有的 .NET Framework 登录、角色和设置 API 访问 Web 服务。通过在应用程序脱机时存储和检索本地数据缓存中的用户信息,客户端应用程序服务还支持偶尔连接。

有关更多信息,请参见客户端应用程序服务

Windows Vista 支持

现有 Windows 窗体应用程序可在 Windows Vista 上无缝运行,如果可能,还可以进行升级,使其具有与专为 Windows Vista 编写的应用程序相同的外观。公用文件对话框将自动更新为 Windows Vista 版本。.NET Framework 3.5 还支持用户帐户控制 (UAC) 盾牌图标。有关更多信息,请参见 FileDialog 类Shield

WPF 支持

可以使用 Windows 窗体来承载 Windows 窗体控件以及 Windows Presentation Foundation (WPF) 控件和内容。还可以从 Windows 窗体打开 WPF 窗口。有关如何一起使用 Windows 窗体和 WPF 的更多信息,请参见迁移和互操作性

LINQ

语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 中的新功能。LINQ 将强大的查询功能扩展到 C# 和 Visual Basic 的语言语法中,并采用标准的、易于学习的查询模式。可以对此技术进行扩展以支持几乎任何类型的数据存储。.NET Framework 3.5 包含 LINQ 提供程序程序集,这些程序集支持使用 LINQ 来查询 .NET Framework 集合、SQL Server 数据库、ADO.NET 数据集和 XML 文档。

作为 .NET Framework 3.5 的一部分的 LINQ 的组件包括:

  • System.Linq 命名空间,其中包含用于 LINQ 查询的基础结构中的标准查询运算符、类型和接口的集合。此命名空间位于 System.Core.dll 程序集中。

  • System.Data.Linq 命名空间,其中包含支持与 LINQ to SQL 应用程序中的关系数据库进行交互的类。

  • System.Data.Linq.Mapping 命名空间,其中包含可用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。

  • System.Xml.Linq 命名空间,其中包含 LINQ to XML 的类。LINQ to XML 是内存中的 XML 编程接口,使您可以轻松有效地修改 XML 文档。通过使用 LINQ to XML,可以加载 XML,序列化 XML,从头创建 XML 树,操作内存中的 XML 树以及使用 XSD 进行验证。还可以组合使用这些功能,将 XML 树从一种形状转换为另一种形状。

  • System.Web.UI.WebControlsSystem.Web.UI.Design.WebControls 命名空间中的新类型。这些新类型(如 LinqDataSource)支持通过数据源控件在 ASP.NET 网页中使用 LINQ。

  • System.Data 命名空间中的 DataRowComparerDataRowExtensionsDataTableExtensions 类支持 LINQ 针对 ADO.NET DataSet 对象的查询。

在类库中,在“内容”窗格和“索引”窗格中的类的成员页中列出了适用于该类的 LINQ 扩展方法。

表达式目录树

表达式树是 .NET Framework 3.5 中的新增功能,提供了一种以数据形式表示语言级代码的方法。System.Linq.Expressions 命名空间包含属于表达式树的构建块的类型。这些类型可用来表示不同类型的代码表达式,例如,方法调用或相等比较。

表达式树在针对远程数据源(如 SQL 数据库)的 LINQ 查询中得到了广泛使用。这些查询以表达式树的形式表示,此表示形式可让查询提供程序检查这些查询并将其转换为特定于域的查询语言。

System.Linq.Expressions 命名空间位于 System.Core.dll 程序集中。

编程语言

有三种 Microsoft 编程语言是明确针对 .NET Framework 的。有关这些语言中的新增功能和增强的更多信息,请参见以下主题:

C# 中的新增功能

Visual C++ 2008 中的新增功能

Visual Basic 语言的新增功能

请参见

概念

ASP.NET 和 Web 开发新增功能

.NET Compact Framework 3.5 版中的新增功能

Windows Presentation Foundation 3.5 版中的新增功能

Visual Studio 2008 中的新增功能