.NET Framework 3.0
1,.NET3.0 介绍
Microsoft .NET Framework 3.0(之前称为 WinFX)是用于 Windows 的新式托管代码编程模型。它将 .NET Framework 2.0 的强大功能与以下四项新技术结合在一起:Windows Presentation Foundation (WPF以前的代号为“Avalon”)、Windows Communication Foundation (WCF,以前的代号为“Indigo”)、Windows Workflow Foundation (WF) 和 Windows CardSpace(WCS,之前称为“InfoCard”)。当前,使用 .NET Framework 3.0 可以构建具有以下特点的应用程序:在外观方面提供无以伦比的用户体验;支持跨技术界限的无缝通信;能够支持广泛的业务流程;提供更简便的个人信息在线管理 方式。现在,作为同一项产品,也就是您所熟悉和喜爱的精彩的 WinFX 技术,有了一个新的名称,这个名称可确切表明它的“身份”– 下一版本的 Microsoft 开发框架。这一变化不会影响 .NET Framework 3.0 的发布计划或作为此程序包的一部分包含于其中的技术。
2.Windows Presentation Foundation
The Microsoft Windows Presentation Foundation provides the foundation for building applications and high fidelity experiences in Windows Vista, blending together application UI, documents, and media content, while exploiting the full power of your computer. The functionality extends to the support for Tablet and other forms of input, a more modern imaging and printing pipeline, accessibility and UI automation infrastructure, data driven UI and visualization, as well as the integration points for weaving the application experience into the Windows shell.
The primary WPF programming model is exposed through managed code. Early in the design phase of WPF there were a number of debates about where the line should be drawn between the managed components of the system and the unmanaged ones. The CLR provides a number of features that make development more productive and robust (including memory management, error handling, common type system, etc.) but they come at a cost.
The major components of WPF are illustrated in the figure below. The red sections of the diagram (PresentationFramework, PresentationCore, and milcore) are the major code portions of WPF. Of these, only one is an unmanaged component – milcore. Milcore is written in unmanaged code in order to enable tight integration with DirectX. All display in WPF is done through the DirectX engine, allowing for efficient hardware and software rendering. WPF also required fine control over memory and execution. The composition engine in milcore is extremely performance sensitive, and required giving up many advantages of the CLR to gain performance.
Communication between the managed and unmanaged portions of WPF is discussed later in this topic. The remainder of the managed programming model is described below.
WPF是什么
Windows Presentation Foundation ,缩写为WPF,其原来代号为“Avalon”, WPF是微软新一代图形系统,运行 在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于 WPF。
程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。
WPF与XAML
20世纪90年代中期,基于SGML,衍生出的XML的应用已变得极为流行。许多开发者把XML视为解决所有计算机开发问题的灵丹妙药,XML几乎无处不在。
针对Vista操作系统,微软提供了专门的界面开发语言XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)。XAML作为微软Vista操作系统的界面描述语言,它可对WPF程序的所有界面元素进行定制,从而构建炫丽夺目的软件界面。
XAML作为界面描述语言(注意是“语言”),它最终会被编译成.Net后台代码。因此,它能够同后台进行逻辑处理的.NET语言如C#、J#、C++、 VB等协同工作,其工作性质类似于ASP.NET中的HTML。XAML的产生,使得界面描述代码和程序代码得以分开,从而提高了开发效率并有利于团队开发。
同HTML一样,XAML既可以直接编码,也可以由专门的工具生成。目前最好的XAML编辑器是Expression Blend,但你也可以使用Windows SDK for Windows Vista中的XAMLPad,但功能却显得太简单。
WPF何以令人佩服
一直以来,完美的用户体验是桌面应用程序和Web应用程序中的一大障碍。许多开发人员绞尽脑汁将界面设计得美观炫丽些、互动感强些,但费了九牛二虎之力, 还是差强人意。由于技术上的限制,Web 应用程序无法提供与桌面应用程序同样丰富的用户体验。而随着电脑与每个人的生活、工作变得密不可分,人们对桌面应用程序的要求也不断提高。永不满足的人们 要求桌面应用程序能够播放视频、运行动画、采用二维或三维图形,以及调用不同的文档。使用 WPF,你可以创建丰富、美妙的连接应用程序,以充分利用 Windows 平台,其中包括 UI、媒体、脱机通信和文档支持。
先来说说WPF程序的设计制作过程。
一般地,大多数WPF程序都将同时包含XAML代码和程序代码。我们首先使用XAML定义程序界面(如前所述,可以手工编写,也可以采用 Experssion Blend等可视化工具编写),然后再用.NET语言(C#, VB.Net等)编写相应的逻辑代码。和ASP.NET类似,逻辑代码既可以直接嵌入XAML文件中,也可保存为独立的代码文件。
尽管XAML并非设计WPF程序所必须,我们依然可以按照传统方式使用程序代码来实现界面设计制作。但是,如果使用XAML,界面设计和逻辑设计就可以完 全分离。这样,不但使程序的开发和维护更加方便,而且当进行团队开发时,可真正实现“专业的人做专业的事”,把界面设计交给专业的美术设计师们去完成,而 让我们精力和时间都宝贵的程序员们专心致志于业务逻辑的实现。真正做到“各尽其能,各施其职”,最终得到一个功能强大、界面一流的WPF程序。这时,就只 等用户“满意一笑,开心买单”了。
听说现在的人都讲求实在,讲求效益。那么,WPF给我们的桌面应用程序和Web应用程序带来了哪些实实在在好处呢?
首先,一套编码,桌面应用程序与Web应用程序均可运用,这当然就节省成本啦。当然,某些时间,改改适当代码是必需的。但改动量如此之小,让你很惊异伟大的Microsoft,让你不得不服。
其次,WPF不仅使美化、多样化了桌面应用程序,也是使Web变得异彩纷呈。WPF 使得3D进入Web成为可能。比如,你可以使用矢量图形设计软件(Illustrator, CorelDraw等, 微软也有了!叫“Expression Designer”)设计好图片,然后将图形输出或导出成为XAML格式。然后,你可以在Blend中打开XAML文件,制作成动画,最后生成的也是 XAML。通过.Net语言(如C#)进行编程,还可以控制这些XAML。加上有VS2005/2008优秀的开发环境,可谓之“牛B无敌”。XAML+ C#是大趋势,必将吸引大批追捧者(从微软.Net的成功,已从一个侧面印证了这一点)。
更多的技术细节。
实际上,WPF 的支持范围远不止基本用户界面应用那么简单,还包括:
(1) 文档的变革。之所以称其为“变革”,是因为它不仅可以使用传统的屏幕显示/打印文档(XPS),而且还可以使用 FlowDocument 标记来显示流文档。文档中不仅可以有文字、图片、链接,还可以有三维动画、视频等。试想一下,在某个重要的日子,当你将所有与他/她在一起时浪漫的照片、 温馨的视频、甜蜜的话语,加上潇洒的签名,发挥你丰富的想象力,做成一个动感十足的动画,或是丰富趣味的互动游戏,将之保存为一份多媒体文档,在恰当的时 间,利用恰当的机会,把它送给他/她的时候,他/她看到之后又是怎样一种感觉呢?在恰当的时间、恰当的地点,由恰当的人,做出恰当的事,这就是最“恰当不 过”的了!
(2)图形:WPF 支持创建二维和三维矢量图形。对于二维图形,WPF 提供标准抽象,例如,形状、画笔和绘图笔,同时还允许三维图形定义模型,以用于指定光线和摄像机位置信息。与早期技术(GDI, GDI+)不同的是,WPF 图形并不是使用开发人员所必须了解的单独一组概念进行图形图像绘制,用于图形描述的XAML元素能够与那些用户界面其他元素自然组合。比如按钮,可以是文 字,也可是带图形和文字的组合,还可以有更多功能。
(3)图像:WPF使用 XAML 的图像标记,可在应用程序中显示不同格式的图形,包括 JPEG,GIF,PNG及其他格式。WPF依靠WIC(Windows Imaging Component) 为编解码器,以及显示和存储图像的软件提供标准框架。在 WPF 中,通常图像元素可以与其他元素组合,比如按钮,可以显示为图像按钮而不是简单的文本标签。
(4)多媒体视频及音频:WPF可使用 MediaElement 标记来显示不同格式的视频和音频,包括 WMV、AVI 和 MPEG等。同样,此元素也可与其他 XAML 元素相组合,更让人称奇的是,你甚至可以使三维立方体的所有侧面上都显示视频。继续发挥你的想像力,你可以让它们动起来,比如3D旋转,拖动或缩放某一侧 面,或是做出你要的效果。在这个世界里,你可以真正做到“人有多大胆,地有多大产”。
(5)动画:WPF 提供动态显示绝大部分用户界面的内置支持。例如,放大和缩小矩形、更改按钮大小。与Adobe Flash中时间线类似,你还可以定义包含时间线的情节提要,也可以调整动画的发生顺序。
(6)数据绑定:基于多数程序都需要显示数据,因此,WPF提供将数据映射到用户界面元素的自动支持功能。类似asp.net的方式, WPF 可为包含在对象和其他源中的信息提供数据绑定,而且还允许在显示数据前对其进行排序和筛选。
最后,可让原有图形图像的重复利用,使你原有的投资发挥最大的效益。
由于XAML基于XML,它的格式是开放的。因此市面上出现了大量有用的转换工具,利用这些工具,可以将你原来在其他设计软件(如Photoshop、 Illustrator、AffectEffects,其他三维设计软件等)制作出来的图形图像、3D动画等导出为XAML。
有关 .NET Framework 3.0 FAQ
2006 年 6 月,Microsoft Corporate 副总裁 S. Somasegar 宣布,WinFX 将更名为 .NET Framework 3.0。本文包含了一些有关这次更名的常见问题。有关部署的其他问题,请查阅 MSDN 上的 关于 .NET Framework 3.0 部署的文章 。
问:WinFX 更名为 .NET Framework 3.0的原因
When speaking to developers about WinFX one question that repeatedly comes up is, “WinFX sounds great, but what happens to .NET?” .NET Framework has becomes the most successful developer platform in the world. Developers know and love .NET.
The .NET Framework has always been at the core of WinFX, but the WinFX brand didn’t convey this. The WinFX brand helped us introduce the incredible innovations in terms of Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), Windows Workflow Foundation (WF) and the newly christened Windows CardSpace (WCS) formerly known under the codename “InfoCard.” The brand also created an unnatural discontinuity between previous versions of our framework and the current version.
With this in mind we have decided to rename WinFX to the .NET Framework 3.0. .NET Framework 3.0 aptly identifies the technology for exactly what it is – the next version of our developer framework.
The change is in name only and will not affect the technologies being delivered as part of the product. The .NET Framework 3.0 is still comprised of the existing .NET Framework 2.0 components, including ASP.NET, WinForms, ADO.NET, additional base class libraries and the CLR, as well as new developer-focused innovative technologies in WPF, WCF, WF and WCS。
The .NET Framework 3.0 will still ship with Windows Vista, and will be available down-level for Windows XP and Windows Server 2003 as planned. This change doesn’t affect in any way the ship schedules of either Windows Vista or the .NET Framework 3.0 itself.
We are confident that this change will go a long way towards reducing confusion people may have about our developer platform and the technologies in which they should invest.
问:.NET Framework 3.0(前称 WinFX)是什么软件?
答:. NET Framework 3.0 是 Microsoft 的托管代码编程模型。它是 .NET Framework 2.0 的一个扩充版本,将 .NET Framework 2.0 组件与新技术结合在一起以构建具有以下特点的应用程序:在外观方面提供无以伦比的用户体验;支持无缝而安全的通信;能够为一系列业务流程建立模型。除了 .NET Framework 2.0 中的内容之外,它还包括 Windows Presentation Foundation (WPF)、Windows Workflow Foundation (WF)、Windows Communication Foundation (WCF) 和 Windows CardSpace。
问:WinFX 技术有什么变故吗?
答:WinFX 技术现在将以 .NET Framework 3.0 这个名称发布。WinFX 技术或发布计划没有任何变化 — 它还是您所熟悉的同一个技术产品,只不过现在有了一个新的名称而已。
问:.NET Framework 3.0 与 .NET Framework 2.0 有什么相关性?
答:. NET Framework 3.0 是 .NET Framework 2.0 的一个扩充版本。.NET Framework 3.0 在 .NET Framework 2.0 基础上添加了以下四项新技术:Windows Presentation Foundation (WPF)、Windows Workflow Foundation (WF)、Windows Communication Foundation (WCF) 和 Windows CardSpace。.NET Framework 3.0 中所包含的 .NET Framework 2.0 组件的版本没有任何变化。这意味着现有的数百万 .NET 开发人员可以利用他们已有的技能来构建 .NET Framework 3.0 应用程序。这还意味着现在运行于 .NET Framework 2.0 之上的应用程序可以继续在 .NET Framework 3.0 上运行。
下图展示了 .NET Framework 3.0 的结构:
问:安装 .NET Framework 3.0 时会怎样处理?如果已经安装了 .NET Framework 2.0,应如何升级?
答: 安装 .NET Framework 3.0 时,安装程序会检查您是否已经安装了 .NET Framework 2.0(已发布版本)。如果尚未安装,.NET Framework 3.0 安装程序将安装 .NET Framework 2.0,然后安装新增的 .NET Framework 3.0 组件。如果已经安装了 .NET Framework 2.0,则 .NET Framework 3.0 安装程序将只安装 .NET Framework 3.0 的新组件。
问:我们已通过了在业务生产中支持 .NET Framework 2.0 的审批过程。对于 .NET Framework 3.0,我们还需要重新通过同样的审批过程吗?我是否需要对我的 .NET Framework 2.0 应用程序进行应用程序兼容性测试?
答: 由于 .NET Framework 3.0 只是向 .NET Framework 2.0 中添加了新组件,而没有更改在 .NET Framework 2.0 中发布的任何组件,因此您基于 .NET Framework 2.0 构建的应用程序不会受到影响。安装 .NET Framework 3.0 后,无需对 .NET Framework 2.0 应用程序进行任何额外的测试。
问:此次更名是否会反映在现有的 .NET Framework 2.0 API、程序集或命名空间中?
答:现有的 .NET Framework 2.0 API、程序集或命名空间都不会有任何变化。基于 .NET Framework 2.0 构建的应用程序将一如既往地继续运行于 .NET Framework 3.0 上。
问:.NET Framework 3.0 使用哪一版本的公共语言运行库(Common Language Runtime,简称 CLR)?
.NET Framework 3.0 使用 2.0 版的 CLR。借助这一版本,整个开发人员平台版本已与 CLR 核心引擎版本分离。我们预期 .NET Framework 的低级组件(如引擎)的变化要少于高级 API,并且这种分离有助于保护客户的技术投资。
问:如果 .NET Framework 3.0 使用的是 .NET Framework 2.0 运行库和编译器,为什么 .NET Framework 的主版本号是 .NET Framework 3.0?
答:.NET Framework 3.0 中所提供的新技术(包括 WCF、WF、WPF 和 CardSpace)实现了大量的功能和创新,我们希望用一个主版本号来表明这一点。
问:.NET Framework 3.0 如何处理两个版本“并行”的问题?
答: 既然 .NET Framework 3.0 包含的只是添加到 .NET Framework 2.0 的新组件,并且 .NET Framework 2.0 和 .NET Framework 3.0 的程序集之间不存在任何重叠,那么就不存在任何真正的“并行”情况。您可以在同一台计算机上运行基于 .NET Framework 2.0 的应用程序和基于 .NET Framework 3.0 的应用程序。
问:我现在正运行一个基于 WinFX 构建的应用程序。为了让它能够在 .NET Framework 3.0 上运行,我需要作什么改动吗?
答:不需要,运行于 WinFX 之上的应用程序无需任何更改就可以立即在 .NET Framework 3.0 上运行。当然,既然 .NET Framework 3.0 还在不断发展,那么将来它可能会有一些变化。
问:我能否去掉某些 .NET Framework 3.0 组件?
答:不能,.NET Framework 3.0 组件(WPF、WCF、WF 和 CardSpace)是一个软件包的组成部分,而且是一起安装的。
问:.NET Framework 3.0 中是否将包含 C# 3.0、VB.NET 9.0、Atlas 或 Linq?
答:不包含,将来版本的 .NET Framework 会包含这些功能部件。.NET Framework 3.0 只包含以前称为 WinFX 的技术。
问:.NET Framework 3.0 是否会附带一个 .NET Compact Framework 3.0 版本?
答:不会。我们目前正在开发一个在 Compact Framework 上支持的 .NET Framework 3.0 功能的版本,但尚未公布发布计划和所包含的功能。
问:.NET Framework 的下一个版本(代号为“Orcas”)的版本号是多少?
答:“Orcas”版本仍在计划之中,所以尚未定义此版本号。
问:.NET Framework 3.0 中的新功能(如 WCF、WF、WPF 以及 CardSpace)安装在什么位置?此位置与 .NET Framework 2.0 的安装位置是否相同?
答: 与 .NET Framework 2.0 共享的组件安装在 %windir%/Microsoft.NET/Framework/V2.0.50727 中。新增到 .NET Framework 3.0 中的组件安装在 %windir%/Microsoft.NET/Framework/V3.0。请参阅 .NET 3.0 部署白皮书 了解有关安装和部署的详细信息。
问:.NET Framework 3.0 有多大?此次变化是否会让发行版本更大?
答:因为只是改变了名称 WinFX,所以 .NET Framework 3.0 的大小没有任何改变。大约为 49 MB,这包含了 .NET Framework 2.0 的大小,大约为 22 MB。
问:服务如何为 .NET Framework 3.0 工作?如果安装 .NET Framework 3.0,我能获得 .NET Framework 2.0 的服务更新吗?
只 要 .NET Framework 2.0 组件和它安装到的操作系统都处于服务状态,服务便对 .NET Framework 2.0 组件可用。对 .NET Framework 2.0 进行的任何服务更新将同时对包含在 .NET Framework 3.0 中安装的 2.0 组件有效。
问:.NET Framework 3.0 可用于哪些操作系统?
答:.NET Framework 3.0 可用于 Windows Vista™、Windows Server 2003 (SP1) 以及 Windows XP (SP2) 上并受这些操作系统支持。
问:.NET Framework 3.0 将于何时发行?答:. NET Framework 3.0 作为 Windows Vista 的一部分提供,获得 Windows Vista 的用户便会收到 .NET Framework 3.0。Windows Vista 向企业客户提供的第一个版本当前计划于 2006 年 11 月发布,但最终的发布日期将取决于用户的反馈。
同时,我们将对所有使用 Windows XP 和 Windows Server 2003 的用户全面提供下载。
问:.NET Framework 3.0 与 Windows Vista 有什么关系?答:.NET Framework 3.0 是 Windows Vista 操作系统的一个核心组件,随 Windows Vista 默认安装。它也向 Windows XP 和 Windows Server 2003 用户提供。
问:.NET Framework 3.0 中的某些部分是否只能用于 Windows Vista?答: 虽然为了利用 Windows Vista 中的新功能,对 .NET Framework 3.0 进行了某些优化,但是我们一直致力于在 Windows Vista、Windows Server 2003 和 Windows XP 中提供对 .NET Framework 3.0 的一致体验。