标题:[资源资料] Visual C++ 2010 中的新增功能
取消只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
 问题点数:0 回复次数:2 
[资源资料] Visual C++ 2010 中的新增功能
Visual C++ 2010 中的新增功能  

发送反馈

本文档介绍 Visual Studio 2010 中新增和增强的 Visual C++ 功能。

Visual C++ 编译器和链接器
--------------------------------------------------------------------------------

auto 关键字

auto 关键字具有新的用途。
使用 auto 关键字的默认含义可声明这样的变量:需从变量声明中的初始化表达式推导出该变量的类型。
/Zc:auto 编译器选项可调用 auto 关键字的新含义或以前的含义。

decltype 类型说明符

decltype 类型说明符返回指定表达式的类型。
结合使用 decltype 类型说明符和 auto 关键字可声明复杂的或仅为编译器所知的类型。
例如,使用该组合可以声明一个模板函数,该函数的返回类型取决于其模板参数的类型。
也可以声明一个模板函数,该函数调用其他函数然后返回被调用函数的返回类型。

Lambda 表达式

Lambda 函数具有函数体但没有名称。
Lambda 函数组合了函数指针和 函数对象的最佳特征。


将 lambda 函数本身用作模板函数参数而不是函数对象,或者将其与 auto 关键字组合使用,可以声明 lambda 类型的变量。

Rvalue 引用

Rvalue 引用声明符 (&&) 声明对 Rvalue 的引用。
rvalue 引用使您能够使用移动语义和完全转发来编写更高效的构造函数、函数和模板。

static_assert 声明

static_assert 声明在编译时测试软件断言,这与在运行时进行测试的其他断言机制不同。
如果断言失败,则编译也将失败,且系统将发出指定的错误消息。

nullptr 和 __nullptr 关键字

通过 Visual C++ 编译器,可以对本机代码或托管代码使用 nullptr 关键字。
nullptr 关键字指示对象句柄、内部指针或本机指针类型不指向对象。
如果使用 /clr 编译器选项,则编译器会将 nullptr 解释为托管代码;如果未使用 /clr 选项,则会解释为本机代码。


特定于 Microsoft 的 __nullptr 关键字与 nullptr 的含义相同,但前者仅适用于本机代码。
如果使用 /clr 编译器选项编译本机 C/C++ 代码,则编译器无法确定 nullptr 关键字是本机项还是托管项。
若要使编译器清楚地了解您的意图,请使用 nullptr 关键字指定托管项,使用 __nullptr 指定本机项。

/Zc:trigraphs 编译器选项

默认情况下,禁用对 三字符组的支持。
使用 /Zc:trigraphs 编译器选项可启用三字符组支持。


三字符组由两个连续的问号(??)及后跟的第三个唯一字符组成。
编译器会将三字符组替换为相应的标点字符。
例如,编译器会将 ??= 三字符组替换为 #(数字字符)字符。
对于使用的字符集未包含某些标点字符的 C 源文件,可在其中使用三字符组。

新按配置优化选项

PogoSafeMode 是一个新的按配置优化选项,使用此选项可以指定在优化应用程序时使用安全模式还是快速模式。
安全模式是线程安全的,但比快速模式的运行速度慢。
快速模式是默认行为。

新公共语言运行时 (CLR) 选项/clr:nostdlib。

为 /clr(公共语言运行时编译)新增了一个选项。
如果包含同一库的不同版本,则会发出编译器错误。
使用该新选项可以排除默认的 CLR 库,以便程序可以使用指定版本。

新建杂注指令 detect_mistmatch

杂注指令 detect_mismatch 使您能够在您的文件中放置一个要与其他具有相同名称的标记进行比较的标记。
如果对于同一个名称存在多个值,则链接器将发出错误。

XOP 内部函数、FMA4 内部函数和 LWP 内部函数

添加了新的内部函数来支持 针对 Visual Studio 2010 SP1 添加的 XOP 内部函数、 针对 Visual Studio 2010 SP1 添加的 FMA4 内部函数 和 针对 Visual Studio 2010 SP1 添加的 LWP 内部函数 处理器技术。
使用 __cpuid, __cpuidex 可确定特定计算机上支持的处理器技术。

Visual C++ 项目和生成系统
--------------------------------------------------------------------------------

MSBuild

Visual C++ 解决方案和项目现在使用 MSBuild.exe(取代了 VCBuild.exe)生成。
MSBuild 同样是灵活的、可扩展的基于 XML 的生成工具,可由其他 Visual Studio 语言和项目类型使用。
由于此更改,Visual C++ 项目文件现在使用 XML 文件格式并具有文件扩展名 .vcxproj。
Visual Studio 早期版本的 Visual C++ 项目文件会自动转换为新文件格式。
有关更多信息,请参见 MSBuild (Visual C++)。

VC++ 目录

VC++ 目录设置现在位于两个位置。
使用项目属性页可为 VC++ 目录设置基于每个项目的值。
使用 “属性管理器”和属性表可为 VC++ 目录设置基于每个配置的全局值。

项目到项目依赖项

在早期版本中,定义的项目之间的依赖项存储在解决方案文件中。
在这些解决方案转换为新项目文件格式时,依赖项会转换为项目到项目引用。
因为解决方案依赖项的概念与项目到项目引用的概念不同,所以此更改会影响应用程序。

宏和环境变量

新的 _ITERATOR_DEBUG_LEVEL 宏将调用对迭代器的调试支持。
使用此新宏取代旧的 _SECURE_SCL 和 _HAS_ITERATOR_DEBUGGING 宏。

Visual C++ 库
--------------------------------------------------------------------------------

并发运行库

并发运行时框架支持同时运行的应用程序和组件,并且它是使用 Visual C++ 进行并发应用程序编程的框架。
为了支持并发应用程序编程, 并行模式库 (PPL) 提供了用于执行细粒度并行操作的通用容器和算法。
异步代理库提供了用于粗粒度数据流和管道任务的基于角色的编程模型和消息传递接口。

标准 C++ 库

下面的列表描述了对标准 C++ 库进行的很多更改。


使用了新的 rvalue 引用 C++ 语言功能来为标准模板库中的很多函数实现移动语义和完全转发。
移动语义和完全转发极大地提高了分配或指派变量或参数操作的性能。


还使用了 rvalue 引用来实现新的 unique_ptr 类,这个新类是一个比 auto_ptr 类更安全的智能指针类型。
unique_ptr 类可移动但不可复制,在不影响安全的情况下实现严格的所有权语义,并且可以与了解 rvalue 引用的容器一起很好地工作。
auto_ptr 类已被弃用。


新增了 15 个函数,例如 <algorithm> 标头中添加了 find_if_not、 copy_if 和 is_sorted。


在 <memory> 标头中,利用新的 make_shared 函数,可以在构造某个对象的同时轻松、可靠、高效地创建指向该对象的共享指针。


<forward_list> 标头支持单独链接的列表。


新的 cbegin、 cend、 crbegin 和 crend 成员函数提供可在整个容器中向前或向后移动的 const_iterator。


<system_error> 标头和相关模板支持处理低级别系统错误。


exception_ptr 类的成员可用来 传输线程之间的异常。


<codecvt> 标头支持将 Unicode 字符的各种编码转换为其他编码。


<allocators> 标头定义了可帮助基于节点的容器分配和释放内存块的多种模板。


对 <random> 标头进行了大量更新。

Microsoft 基础类 (MFC) 库
Windows 7 功能

MFC 支持 Windows 7 的很多功能,例如,功能区用户界面 (UI)、任务栏、跳转列表、选项卡式缩略图、缩略图预览、进度栏、图标覆盖和搜索索引。
因为 MFC 自动支持 Windows 7 的很多功能,因此您可能不必修改现有应用程序。
若要支持新应用程序中的其他功能,可使用 “MFC 应用程序向导”指定要使用的功能。

多点触控感知

MFC 支持具有多点触控用户界面的应用程序,例如,针对 Microsoft Surface 操作系统编写的应用程序。
多点触控应用程序可处理 Windows 触控消息和笔势消息(触控消息的组合)。
在您的应用程序注册触控事件和手势事件之后,操作系统就会将多点触控事件路由到您的事件处理程序。

高 DPI 识别

默认情况下,MFC 现在可以识别高 DPI。
如果应用程序可以识别高 DPI(每英寸像素数),则操作系统会将窗口、文本和其他 UI 元素缩放至当前屏幕分辨率。
这意味着,缩放的图像很可能是经过正确布局的,而不是经过剪切或像素化的。

重新启动管理器

重新启动管理器会在应用程序意外关闭或重新启动时,自动保存文档并重新启动该应用程序。
例如,在自动更新关闭某个应用程序后,您可以使用重新启动管理器来启动该应用程序。
有关如何将应用程序配置为使用重新启动管理器的更多信息,请参见 如何:添加重新启动管理器支持。

CTaskDialog

可以使用 CTaskDialog 类来代替标准的 AfxMessageBox 消息框。
CTaskDialog 类比该标准消息框显示和收集的信息要多。

SafeInt 库

新的 SafeInt 库执行导致整数溢出的安全算术运算。
该库还会比较不同类型的整数。

新的活动模板库 (ATL) 宏

向 ATL 中添加了新的宏来扩展 PROP_ENTRY_TYPE 和 PROP_ENTRY_TYPE_EX 的功能。
PROP_ENTRY_INTERFACE 和 PROP_ENTRY_INTERFACE_EX 可用于添加有效 CLSID 的列表。
PROP_ENTRY_INTERFACE_CALLBACK 和 PROP_ENTRY_INTERFACE_CALLBACK_EX 可用于指定一个回调函数来确定 CLSID 是否有效。

/analyze 警告

已从 C 运行时 (CRT)、MFC 和 ATL 库中移除大多数 /analyze(企业代码分析)警告。

动画和 D2D 支持

MFC 现在支持动画和 Direct2D 图形。
MFC 库中新增了一些 MFC 类和函数来支持此功能。
此外,还有新增了两个演练来分别演示如何将 D2D 对象和动画对象添加到项目中。
这两个演练分别为 演练:向 MFC 项目添加 D2D 对象和 演练:向 MFC 项目添加动画。

IDE
--------------------------------------------------------------------------------


在 Visual C++ 2010 中,集成开发环境 (IDE) 在性能、准确性、可伸缩性和工具方面进行了显著改进,可帮助您提高生产效率。

改进的 IntelliSense

Visual C++ 的 IntelliSense 完全进行了重新设计,以便能够更快、更准确并且有能力处理更大的项目。
为了完成此次改进,IDE 对开发人员查看和修改源代码的方式与 IDE 使用源代码和项目设置生成解决方案的方式进行了区分。


由于这种责任分离, “类视图”和新的 “定位到”对话框这样的浏览功能将由一个基于新的 SQL Server 桌面数据库 (.sdf) 文件(取代了旧版的无编译浏览 (.ncb) 文件)的系统
进行处理。
IntelliSense 功能(例如,快速信息、自动完成和参数帮助) 仅在需要时才会分析转换单元。
混合功能(例如,新的 “调用层次结构”窗口)结合了浏览和 IntelliSense 功能。


因为 IntelliSense 仅在需要时才对信息进行处理,因此 IDE 的响应更快。
另外,由于信息更新,IDE 视图和窗口更准确了。
最后,由于 IDE 基础结构的组织更合理、处理能力更强并且可伸缩性更大,因此可以处理更大的项目。

改进的 IntelliSense 错误

IDE 可更好地检测可能会导致丧失 IntelliSense 功能的错误,并在错误下显示红色的波浪下划线。
此外,IDE 还会在 “错误列表”窗口中报告 IntelliSense 错误。
若要显示导致问题的代码,请在 “错误列表”窗口中双击错误。

#include 自动完成功能

IDE 支持 #include 关键字自动完成。
在键入 #include 时,IDE 会创建一个包含有效头文件的下拉列表框。
如果继续键入文件名,则 IDE 会基于输入来筛选该列表。
您可以随时从该列表中选择要包含的文件。
这样可快速地包含文件,而无需知道确切的文件名。

定位到

利用 “定位到”对话框,您可以搜索项目中与指定字符串匹配的所有符号和文件。
随着您在搜索字符串中键入其他字符,搜索结果会即时进行修改。
“结果”反馈字段会告知您已找到的项目数量,并帮助您决定是否要约束搜索。
“类型/范围”、 “位置”和 “预览”反馈字段有助于您消除名称类似的项目的歧义。
另外,您可以扩展此功能以支持其他编程语言。

并行调试和分析

Visual Studio 调试器可识别 并发运行时,帮助您排除并行处理应用程序的故障。
您可使用新的并发探查器工具直观地显示应用程序的总体行为。
此外,您可使用新的工具窗口直观地显示任务及其调用堆栈的状态。

功能区设计器

功能区设计器是一个图形编辑器,利用它可创建和修改 MFC 功能区 UI。
最终的功能区 UI 由基于 XML 的资源文件 (.mfcribbon-ms) 表示。
对于现有应用程序,您可通过临时添加一些代码行然后调用 “功能区设计器”的方法来捕获当前功能区 UI。
创建功能区资源文件之后,可以使用一些用于加载功能区资源的语句来替换您手写的功能区 UI 代码。

调用层次结构

利用 “调用层次结构”窗口,您可定位到由特定函数调用的所有函数,或定位到调用特定函数的所有函数。

工具
--------------------------------------------------------------------------------

MFC 类向导

Visual C++ 2010 恢复了备受好评的  MFC 类向导工具。
通过使用 “MFC 类向导”,可以很方便地向项目中添加类、消息和变量,而不必手动修改源文件集。

ATL 控件向导

ATL 控件向导不再自动填充 “ProgID”字段。
如果某个 ATL 控件没有 ProgID,,则其他工具可能无法用于该控件。
例如, “插入活动控件”对话框就是要求控件具有 ProgID 的工具。
有关此对话框的更多信息,请参见 “插入 ActiveX 控件”对话框。

Microsoft Macro Assembler Reference
--------------------------------------------------------------------------------


新增的 YMMWORD 数据类型支持包含在 Intel 高级矢量扩展 (AVX) 指令中的 256 位多媒体操作数。
搜索更多相关主题的帖子: auto 编译器 表达式 资料 
2012-07-28 17:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
Visual C++ 中的重大更改  

发送反馈

此文档列出了 Visual C++ 2010 中的重大更改。

Visual C++ 编译器
--------------------------------------------------------------------------------


auto 关键字具有新的默认含义。
由于使用旧含义的情况很少见,因此大多数应用程序都不会受此更改影响。


引入了新的 static_assert 关键字,如果代码中已经存在具有某个名称的标识符,则此关键字将导致名称冲突。


对新 lambda 表示法的支持不支持对 IDL uuid 特性中未加引号的 GUID 进行编码。


.NET Framework 4 引入了损坏状态异常概念,这些异常会导致进程处于无法恢复的损坏状态。
默认情况下,即使使用捕获所有其他异常的 /EHa 编译器选项,也无法捕获损坏状态异常。


若要显式捕获损坏的状态异常,请使用 __try-__except 语句。
或者,应用 [HandledProcessCorruptedStateExceptions] 特性以允许使用函数捕获损坏状态异常。


此更改主要影响可能必须捕获损坏状态异常的系统程序员。
八个此类异常为 STATUS_ACCESS_VIOLATION、STATUS_STACK_OVERFLOW、EXCEPTION_ILLEGAL_INSTRUCTION、EXCEPTION_IN_PAGE_ERROR、EXCEPTION_INVALID_DISPOSITION、EXCEPTION_NONCONTINUABLE_EXCEPTION、EXCEPTION_PRIV_INSTRUCTION 和 STATUS_UNWIND_CONSOLIDATE。
有关这些异常的更多信息,请参见 GetExceptionCode 宏。


修改后的 /GS 编译器选项可防止此版本中的缓冲区溢出比早期版本中的更广泛。
此版本可能会在可降低性能的堆栈中插入附加的安全检查。
使用新 __declspec(safebuffers) 关键字可指示编译器不对特定函数插入安全检查。


如果使用 /GL(全程序优化)和 /clr(公共语言运行时编译)编译器选项进行编译,则忽略 /GL 选项。
进行此更改是因为组合使用编译器选项没有什么优点。
进行此更改后,生成的性能得到了改进。


默认情况下,在 Visual C++ 2010 中禁用对 三字符组的支持。
使用 /Zc:trigraphs 编译器选项可启用三字符组支持。
三字符组由两个连续的问号(“??”)及后跟的第三个唯一字符组成。
编译器会将三字符组替换为相应的标点字符。
例如,编译器会将“??=”三字符组替换为“#”字符。
对于使用的字符集未包含某些标点字符的便捷图形表示形式的 C 源文件,可在其中使用三字符组。


链接器不再支持对 Windows 98 进行优化。
如果指定 /OPT:WIN98 或 /OPT:NOWIN98,则 /OPT(优化)选项将会产生编译时错误。


由 “RuntimeLibrary”和 “DebugInformationFormat”生成系统属性指定的默认编译器选项已发生更改。
默认情况下,这些生成属性是在由 Visual C++ 7.0 至 10.0 版创建的项目中指定的。如果迁移由 Visual C++ 6.0 创建的项目,则应考虑是否指定这些属性的值。


在 Visual C++ 2010 中, “RuntimeLibrary”设置为 “MultiThreaded (/MD)”, “DebugInformationFormat”设置为 “ProgramDatabase (/Zi)”。
在 Visual C++ 9.0 中, “RuntimeLibrary”设置为 “MultiThreaded (/MT)”, “DebugInformationFormat”设置为 “Disabled”。

公共语言运行时 (CLR)
--------------------------------------------------------------------------------


Microsoft C# 和 Visual Basic 编译器现在可以生成“非主互操作程序集”(非 PIA)。
非 PIA 程序集可以使用 COM 类型而无须部署相关主互操作程序集 (PIA)。
使用由 Visual C# 或 Visual Basic 生成的非 PIA 程序集时,在引用使用库的任何非 PIA 程序集之前,必须在编译命令中引用 PIA 程序集。

Visual C++ 项目和 MSBuild
--------------------------------------------------------------------------------


Visual C++ 项目现在基于 MSBuild 工具。
因此,项目文件会使用新 XML 文件格式和 .vcxproj 文件后缀。
Visual C++ 2010 会自动将项目文件从 Visual Studio 早期版本转换为新文件格式。


如果某个现有项目依赖于先前的生成工具 VCBUILD.exe 或项目文件后缀 .vcproj,该项目将受影响。


在早期版本中,Visual C++ 支持属性表的后期计算。
例如,父属性表可以导入子属性表,然后父属性表可以使用子属性表中定义的变量来定义其他变量。
利用后期计算,即使在导入子属性表之前,父属性表也可以使用子变量。
在 Visual C++ 2010 中,不能在定义项目表变量之前使用该变量,因为 MSBuild 仅支持早期计算。

集成开发环境
--------------------------------------------------------------------------------


“应用程序终止”对话框不再终止应用程序。


在以前的版本中,当 abort() 或 terminate() 函数关闭应用程序的零售内部版本时,C 运行库将在控制台窗口或对话框中显示应用程序终止消息。
该消息的部分内容为,“此应用程序已请求运行时以异常方式终止它。
请与应用程序技术支持团队联系,以便获得更多信息。”


应用程序终止消息是多余的,因为 Windows 随后显示了当前终止处理程序,它通常是“Windows 错误报告”(Dr.
Watson) 对话框或 Visual Studio 调试器。
从 Visual Studio 2010 开始,C 运行库将不显示该消息。
而且,运行时还将阻止应用程序在调试器启动前终止。


仅当您依赖于应用程序终止消息的以前行为时,才会进行此重大更改。


对于 Visual Studio 2010 具体而言,IntelliSense 无法用于 C++/CLI 代码或特性, “查找所有引用”无法用于本地变量,且代码模型不会从导入的程序集检索类型名称或者将类型解析为其完全限定名。

Visual C++ 库
--------------------------------------------------------------------------------


SafeInt 类现在包括在 Visual C++ 中,不再需要单独下载。
仅当您开发了一个也称为“SafeInt”的类时,才会进行此重大更改。


库部署模型会再次使用清单来查找特定版本的动态链接库。
实际上,每个动态链接库的名称包含其版本号,您可以使用该名称查找库。
有关更多信息,请参见 Visual C++ 2010 中的部署。


在 Visual Studio 的早期版本中,可以重新生成运行库。
Visual C++ 2010 不再支持生成您自己的 C 运行库文件的副本。

标准模板库

<iterator> 标头不再自动包含在许多其他头文件中。
但是,如果您需要 <interator> 标头中定义的独立迭代器支持,则会显式包含该标头。


在 <algorithm> 标头中,移除了 checked_* 和 unchecked_* 函数。
此外还在 <iterator> 标头中,移除了 checked_iterator 类并增加了 unchecked_array_iterator 类。


移除了 CComPtr::CComPtr(int) 构造函数。
该构造函数允许从 NULL 宏构造 CComPtr 对象,但不是必需的,还允许从非零整数构造无意义结构。


CComPtr 仍可从定义为 0 的 NULL 进行构造,但如果从文本 0 以外的整数构造,则会失败。
您最可能在以下伪代码描述的情况中遇到此问题。

以带有颜色区分的格式查看复制到剪贴板打印pair<X, CComPtr<T>> myVar;
  myVar = make_pair(x, NULL);
  
pair<X, CComPtr<T>> myVar;
myVar = make_pair(x, NULL);


若要修复第二个语句,请使用 nullptr 关键字来替代 NULL 宏。

以带有颜色区分的格式查看复制到剪贴板打印myVar = make_pair(x, nullptr)
  
myVar = make_pair(x, nullptr)


移除了以下 ctype 成员函数: ctype::_Do_narrow_s、 ctype::_Do_widen_s、 ctype::_narrow_s 和 ctype::_widen_s。
如果应用程序使用上述任一成员函数,则必须将其替换为对应的非安全版本: ctype::do_narrow、 ctype::do_widen、 ctype::narrow 或 ctype::widen。

CRT、MFC 和 ATL 库

已移除用户支持,以生成 CRT、MFC 和 ATL 库。
例如,未提供相应的 nmake 文件。
但是,用户仍对这些库的源代码具有访问权限。
并且将可能在 Visual C++ 团队博客中发表一篇文档,其中描述 Microsoft 用来生成这些库的 MSBuild 选项。


已移除对 IA64 的 MFC 支持。
但是,仍提供对 IA64 的 CRT 和 ATL 支持。


MFC 模块定义 (.def) 文件中不再重用序号。
此更改意味着,次要版本间的序号将相同,且 Service Pack 和快速修补工程版本的二进制兼容性将得到改进。


CDocTemplate 类中添加了一个新的虚函数。
这一新的虚函数为 CDocTemplate::OpenDocumentFile。
OpenDocumentFile 的早期版本具有两个参数。
而新版本具有三个参数。
若要支持重新启动管理器,派生自 CDocTemplate 的任何类都必须实现具有三个参数的版本。
有关此函数的更多信息,请参见 CDocTemplate::OpenDocumentFile。
新参数为 bAddToMRU。

宏和环境变量

不再支持环境变量 __MSVCRT_HEAP_SELECT。
已移除此环境变量,且没有替换变量。

Microsoft Macro Assembler Reference
--------------------------------------------------------------------------------


从 Microsoft Macro Assembler 编译器中移除了多个指令。
移除的指令包括 .186、 .286、 .286P、 .287、 .8086、 .8087 和 .NO87。


授人以渔,不授人以鱼。
2012-07-28 17:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
.NET Framework 4 中的新增功能  

发送反馈


本主题包含有关 .NET Framework 4 版中的主要功能和改进的信息。
此主题不提供有关所有新增功能的完整信息,并有可能会发生更改。


.NET Framework 4 引进了改进的安全模式。
有关更多信息,请参见 .NET Framework 4 中的安全性更改。


以下各节介绍了 .NET Framework 4 的其它新增功能和改进:

应用程序兼容性和部署

核心新增功能和改进

Managed Extensibility Framework

并行计算

网络

Web

客户端

数据

Windows Communication Foundation

Windows Workflow Foundation


有关添加到现有类型中的新命名空间、新类型和新成员的列表,请参见 .NET Framework 4 中的新增类型和成员。


Visual Studio 2010 Service Pack 1 (SP1) 包含对 .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 4 的指南,请参见 .NET Framework 4 的迁移指南和 .NET Framework 的版本兼容性。


以下各节介绍了部署改进。

Client Profile

.NET Framework 4 Client Profile 比以前的版本支持更多平台,并可提供应用程序的快速部署体验。
默认情况下,一些新增的项目模板现在以 .NET Framework 4 Client Profile 为目标。
有关更多信息,请参见 .NET Framework Client Profile。

进程内并行执行

此功能使应用程序能够在同一个进程中加载和启动多个版本的 .NET Framework。
例如,您可以运行在同一进程中加载基于 .NET Framework 2.0 SP1 的外接程序(或组件)和基于 .NET Framework 4 的外接程序的应用程序。
较旧组件可继续使用 .NET Framework 的较旧版本,新组件则使用 .NET Framework 的新版本。
有关更多信息,请参见 进程内并行执行。

可移植类库

安装 Visual Studio 2010 Service Pack 1 (SP1) 和 Portable Library Tools 后,您可创建不必重新编译即可在各种 .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 提供了新的非特定和特定区域性、更新的属性值、字符串处理的改进以及其他一些改进。
有关更多信息,请参见 全球化和本地化中的新增功能。

垃圾回收

.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. 命名空间中还添加了多个支持 .NET Framework 基础结构的新类。
有关更多信息,请参见 动态语言运行时概述。

协变和逆变

现在,有多个泛型接口和委托支持协变和逆变。
有关更多信息,请参见 泛型中的协变和逆变。

BigInteger 和复数

新的 System.Numerics.BigInteger 结构是一个任意精度 Integer 数据类型,它支持所有标准整数运算(包括位操作)。
可以通过任何 .NET Framework 语言使用该结构。
此外,一些新 .NET Framework 语言(例如 F# 和 IronPython)对此结构具有内置支持。


新的 System. 结构表示一个复数,它支持使用复数的算术运算和三角运算。

元组

.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<T>集合的成员的新重载。


您可以使用 String.Concat 方法将可枚举集合中的每个元素连接在一起,而无需先将元素转换成字符串。


可以使用的两种新的简便方法是: StringBuilder.Clear 和 Stopwatch.Restart 。


新的 Enum.HasFlag 方法确定在某个枚举值中是否设置了一个或多个位域或标志。
Enum.TryParse 方法返回一个布尔值,指示能否成功分析字符串或整数值。


System.Environment.SpecialFolder 枚举包含多个新文件夹。


现在可以使用从 类继承的类中的 CopyTo 方法轻松地将一个流复制到另一个流中。


使用新的 方法重载可组合文件路径。


新的 接口为基于推送的通知提供通用机制。


System.IntPtr 和 System.UIntPtr 类现在包括对加法运算符和减法运算符的支持。


现在可以通过将类型包装在 System.Lazy<T>类内部,为任何自定义类型启用迟缓初始化。


新的 System.Collections.Generic.SortedSet<T>类提供了一个按插入、删除和搜索后的排序顺序维护数据的自平衡树。
此类可实现新的 System.Collections.Generic.ISet<T>接口。


类的压缩算法得到了改进,以便不再扩充已压缩的数据。
此外,还移除了压缩流的 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 概述和 Managed Extensibility Framework。
有关 MEF 类型的列表,请参见 命名空间。

返回页首

并行计算
--------------------------------------------------------------------------------


.NET Framework 4 引入了用于编写多线程和异步代码的新编程模型,极大地简化了应用程序和库开发人员的工作。
该新模型使开发人员可以通过固有方法编写高效、细化且可伸缩的并行代码,而不必直接处理线程或线程池。
新的 System.Threading.Tasks 命名空间和其他相关类型支持此新模型。
并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现,能够通过声明性语法实现类似功能。
有关更多信息,请参见 .NET Framework 中的并行编程。

返回页首

网络
--------------------------------------------------------------------------------


网络改进包含以下几个方面:


若干类中对于 Windows 身份验证的安全改进,包括
对于 Windows 7 和 Windows Server 2008 R2 上的应用程序提供了扩展保护。
有关更多信息,请参见 Integrated Windows Authentication with Extended Protection。


支持使用 IPv6 或 Teredo 的网络地址转换 (NAT) 遍历。
有关更多信息,请参见 NAT Traversal using IPv6 and Teredo。


提供有关 HttpWebRequest 对象的信息的新的网络性能计数器。
有关更多信息,请参见 联网性能计数器。


类中,支持在 AddRange 方法的新重载中使用大字节范围标头(64 位范围)。
类的新属性允许应用程序设置很多 HTTP 标头。
可使用 Host 属性设置 HTTP 请求中独立于请求 URI 的 Host 标头值。


对于 和相关类的安全套接字层 (SSL) 支持。


改进了对 类中的邮件标头的支持。


对在加密中使用 null 密码的支持。
可以通过使用 类和 EncryptionPolicy 属性指定加密策略。
类的构造函数现在采用 类作为参数。


类中提供了用于基于密码的身份验证方案(例如基本、摘要、NTLM 和 Kerberos 身份验证)的凭据。
为了提高安全性,现在可将密码作为 System.Security.SecureString 实例而不是 System.String 实例进行处理。


在 System.Uri 和 类中指定如何转换和规范化使用百分号编码值的 URI 能力。
有关更多信息,请参见 、 System.Configuration.SchemeSettingElement 、 System.Configuration.SchemeSettingElementCollection 和 System.Configuration.UriSection 类。

返回页首

Web
--------------------------------------------------------------------------------


4 版在以下几个方面引入了新功能:


核心服务,包括可用来扩展缓存的新 API、支持对会话状态的数据进行压缩以及新的应用程序预加载管理器(自动启动功能)。


Web 窗体,包括对 路由的更集中化支持、对 Web 标准的增强支持、更新的浏览器支持、数据控件的新功能以及视图状态管理的新功能。


Web 窗体控件,包括新的 Chart 控件。


MVC,包括视图的新帮助器方法、对分区的 MVC 应用程序的支持以及异步控制器。


动态数据,包括对现有 Web 应用程序的支持、对多对多关系和继承的支持、新的字段模板和特性以及增强的数据筛选。


Microsoft Ajax,包括对 Microsoft Ajax 库中的基于客户端的 Ajax 应用程序的附加支持。


Visual Web Developer,包括改进的 JScript IntelliSense、针对 HTML 和 标记的新的自动完成代码段和增强的 CSS 兼容性。


部署,包括用于自动化典型部署任务的新工具。


多目标,包括针对目标版本的 .NET Framework 中未提供的功能的更好的筛选功能。


有关这些功能的更多信息,请参见 4 和 Visual Web Developer 中的新增功能。

返回页首

客户端
--------------------------------------------------------------------------------


Windows Presentation Foundation (WPF) 版本 4 包含以下方面的更改和改进:


新控件,包括 Calendar、 DataGrid 和 DatePicker。


VisualStateManager 支持更改控件的状态。


利用触控和操作,您可以创建在 Windows 7 上同时接收来自多个触控的输入的应用程序。


图形和动画支持布局舍入、像素着色器版本 3.0、缓存合成和缓动函数。


文本改进了文本呈现,并支持在文本框中自定义插入符号的颜色和选定内容的颜色。


InputBinding 的 Command 属性、动态对象和 Text 属性支持绑定。


XAML 浏览器应用程序 (XBAP) 支持与网页通信,并且支持完全信任部署。


利用 System.Windows.Shell 命名空间中新增的类型,您能够与 Windows 7 任务栏通信,还能将数据传递到 Windows shell。


Visual Studio 2010 中的 WPF 和 Silverlight 设计器中提供了各种设计器改进,有助于创建 WPF 或 Silverlight 应用程序。


有关更多信息,请参见 WPF 版本 4 的新增功能。

返回页首

数据
--------------------------------------------------------------------------------



提供了一些用于 Entity Framework 的新功能,其中包括持久性未知对象、LINQ 查询中的函数以及自定义对象层代码生成。
有关更多信息,请参见 中的新增功能。

动态数据

4 的动态数据得到了增强,为您提供快速生成数据驱动网站的更强大功能。
这包括:


基于数据模型中定义的约束的自动验证。


可以使用属于动态数据项目一部分的字段模板轻松更改为 GridView 和 DetailsView 控件中的字段生成的标记。


有关更多信息,请参见 4 和 Visual Web Developer 中的新增功能。

WCF Data Services — WCF 数据服务

数据服务已重命名为“WCF 数据服务”,它具有以下新功能:


数据绑定。


计算实体集中的实体数。


服务器驱动的分页。


查询投影。


自定义数据服务提供程序。


二进制资源的流式处理。


有关更多信息,请参见 What's New in WCF Data Services。

返回页首

Windows Communication Foundation
--------------------------------------------------------------------------------


Windows Communication Foundation (WCF) 提供以下改进:


基于配置的激活:取消了对具有 .svc 文件的要求。


System.Web.Routing 集成:通过允许使用无扩展 URL,使您能更好地控制服务的 URL。


多个 IIS 网站绑定支持:允许您在同一网站上具有多个使用相同协议的基址。


路由服务:允许您基于内容路由消息。


支持 WS-Discovery:允许您创建和搜索可发现服务。


标准终结点:预定义的终结点,可允许您只指定某些属性。


工作流服务:通过提供用于发送和接收消息的活动、基于内容关联消息的功能以及工作流服务主机来集成 WCF 和 WF。


WCF REST 功能:


Web HTTP 缓存:允许缓存 Web HTTP 服务响应。


Web HTTP 格式支持:允许您动态确定服务操作做出响应的最佳格式。


Web HTTP 服务帮助页:提供 Web HTTP 服务的自动帮助页,此页与 WCF 服务帮助页类似。


Web HTTP 错误处理:允许 Web HTTP 服务以与操作相同的格式返回错误信息。


Web HTTP 跨域 JavaScript 支持:允许使用 JSON Padding (JSONP)。


简化配置:减少了服务所需的配置量


有关更多信息,请参见 What's New in Windows Communication Foundation。

返回页首

Windows Workflow Foundation
--------------------------------------------------------------------------------


Windows Workflow Foundation (WF) 提供以下方面的改进:


改进的工作流活动模型: Activity 类提供工作流行为的基本抽象。


各种复合活动选项:工作流可从以传统的流控制结构为模型的新建流控制活动(如 Flowchart、 TryCatch 和 Switch<T>)受益。


扩展的内置活动库:活动库的新增功能包括新的流控制活动、用于操作成员数据的活动以及用于控制事务的活动。


显式活动数据模型:用于存储或移动数据的新增选项包括变量和方向参数。


增强的宿主、持久性和跟踪选项:宿主增强包括更多的运行工作流选项,使用 Persist 活动的显式保持,保持而不进行卸载,使用非持久区域阻止保持,使用宿主中的环境事务,将跟踪信息记录到事件日志,以及使用 Bookmark 对象继续挂起的工作流。


更简单的 WF 设计器扩展功能:新的 WF 设计器是基于 Windows Presentation Foundation (WPF) 构建的,提供了一个可在 Visual Studio 外部重新承载 WF 设计器时使用的更简单的模型。


有关更多信息,请参见 What's New in Windows Workflow Foundation。

返回页首

授人以渔,不授人以鱼。
2012-07-28 18:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374287-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.245407 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved