微软.NET平台现任负责人Scott Gu日前在博客上宣布要撰写一个系列的文章介绍Visual Studio 2010和.NET 4,下面是这个系列的第三篇:
今天的贴子讨论VS 2010中增强了的多定向(multi-targeting)支持,该支持允许你使用和定向.NET的多个版本。我们在VS 2010版本中做了重大的架构级工作,实现了若干个新的多定向特性,提供了更佳的体验。
理解并列(Side-by-Side)的含义
VS 2010可以和Visual Studio的早期版本并列(side by side)安装。这意味着,你可以在安装了VS 2008/VS 2005/VS 2003的同个机器上安装VS 2010,如果你想要的话,可以同时使用所有这些版本。
.NET 4.0也可以和.NET的早期版本并列(side by side)安装在同个机器上。.NET 4.0给了框架类库和CLR引擎新的版本号码,这意味着,它可以完全独立于.NET 2.0, 3.0 和 3.5运行。这意味着,你可以在安装了.NET 2.0/3.0/3.5的机器上安装 .NET 4.0, 配置某些应用使用.NET 4.0来运行,其他应用使用老一点的.NET版本来运行(IIS管理器工具允许你配置一个ASP.NET应用所使用的.NET版本)。这允许你将.NET 4.0用于新的应用,而没有必要测试和升级所有现有的应用。
VS 2008的多定向支持
VS 2008是第一个包含.NET多定向支持的Visual Studio版本,这意味着,你不光可以使用VS 2008创建和编辑.NET 3.5 项目,也可以创建和编辑.NET 3.0 和 .NET 2.0项目。这允许开发人员更快地升级和充分利用新的Visual Studio工具特性,而不必要求在运行他们应用的客户机和生产性服务器端安装新一点的.NET 版本。
VS 2008的多定向支持利用了.NET 2.0, .NET 3.0, 和 .NET 3.5都是在同个版本的CLR之上运行的这个事实,而这三个.NET 版本的主要区别在于它们的框架类库。结果是,Visual Studio的编译器能够生成同样的IL输出,调试器能够针对同个CLR引擎进行调试,IDE对多定向的支持主要着重于过滤掉不支持某个给定.NET 版本的新的程序集和项目模板的的显示。
这个多定向体验是可行的,尽管不完美。VS 2008中的Intellisense总是显示.NET 3.5版本的框架类库的类型和成员(即使你定向的是.NET 2.0)。这意味着,你有时候会在无意中使用一个ASP.NET 3.5才有的方法,尽管你是在开发一个ASP.NET 2.0 项目。
VS 2010的多定向支持
我们在Visual Studio 2010中做了一些非常重大的架构级改动,来促成更好和更精确的多定向支持。
VS 2010现在给每一个.NET版本都配置了我们称之为“引用程序集(reference assemblies)”的东西。“引用程序集”只包含某个特定框架程序集的元数据,而不是它的实现(因此所占硬盘极小)。但这个元数据足够确保VS 2010总是能够在定向某个.NET 框架版本时提供百分之百精确的intellisense。这还意味著,通过设计器中属性表格呈示的属性,对象浏览器中的API列表,以及IDE中所有其它各种地方都能精确地显示出确切版本的API签名。
我们还更新了VS 2010调试器,profiler和编译器,使之能够定向多个CLR版本。
使用VS 2010的多定向支持
为更好地理解这些新的多定向特性的工作原理,让我们用VS 2010来创建一个新的ASP.NET Web应用。我们先用 “文件->新项目”菜单命令调出“新项目”对话框,使用对话框顶部的版本下拉框过滤项目模板,使之只显示.NET 2.0所支持的模板,然后创建一个新的ASP.NET 2.0 web应用项目:
因为这个项目定向的是.NET 2.0,VS 2010 会自动对工具箱和标识intellisense进行过滤,只允许我们使用那些随ASP.NET 2.0发布的控件。不象VS 2008,VS 2010中的属性表格现在自动过滤,只显示那些ASP.NET 2.0按钮控件所支持的属性:
在编写代码时,VS 2010现在也只显示.NET 2.0所支持的那些类型和方法/属性/事件的代码intellisense。在下面,在键入“Response.Re”时,你可以看到ASP.NET 2.0 “Response”对象的intellisense:
在使用内置的VS web服务器运行应用时,它会使用 ASP.NET 2.0版本来运行(VS 2010调试器调试的是CLR 2.0进程):
将项目从.NET 2.0 移植到.NET 4.0
或者,我们也可以在解决方案管理器中右击项目,调出它的属性对话框,来将项目重新定向,使之在.NET后期版本下工作。我们可以选择对话框上的“定向框架(target framework)”下拉框,选择我们想要定向的.NET框架版本:
我们可以从上面的各种不同的.NET版本中任选一个。该列表中包括了一个"Server Core(服务器核心)” profile,支持无界面的Windows Server 2008 R2版本,它不支持某些APIs。因为我们用于元数据和intellisense的引用程序集能够支持任意一个版本,如果它们引进任何新的API的话,我们甚至能够在将来的服务包中发布它们的版本,以促成百分之百的精确性。
在这个示范中,我们将选择把项目移植到.NET 4.0,完毕后,VS 2010将自动地更新项目的引用程序集,以及项目的web.config文件来适当反映出所用的新版本。
做完这一步后,VS 2010 会过滤工具箱和标识intellisense,显示ASP.NET 4.0版本中所有新的控件和属性。 例如,下面的属性表格现在显示了新的“ClientIDMode”属性,该属性是ASP.NET 4.0中所有控件都有的,它能让你控制客户端ID是如何输出的,以避免丑陋的客户端id(这是ASP.NET 4.0中的一个新特性,我会在以后的博客中讨论):
至此,我们将项目升级到使用.NET 4.0,VS 2010现在也会显示.NET 4.0中的新的类型和类型中的方法/属性/事件的代码intellisense。例如,在下面,你可以看到 ASP.NET 4.0 “Response” 对象上的一些新的redirect方法(是在前面项目定向.NET 2.0时没有出现的):
上面新的Response.RedirectPermanent()方法方便了发出“HTTP 301 Moved”回复,该回复可以避免你的网站在搜索引擎中积存失效的链接。URL导向引擎现在也同时为基于ASP.NET Web Forms 和 ASP.NET MVC的应用所支持,新的Response.RedirectToRoute()方法允许你轻松地重新定向到在其中声明的路径。
最后,在我们使用内置的VS web服务器运行应用时,VS 2010现在会使用ASP.NET 4.0版本来运行这个应用:
结束语
Visual Studio 2010的多定向支持允许你开发定向 .NET 4.0, .NET 3.5, .NET 3.0 和 .NET 2.0的项目。它允许你开始利用新的工具特性,而不必马上将运行你应用的客户机和服务器升级到.NET 4.0。这改进了的多定向支持将确保其体验比以前更好,更精确。
希望本文对你有所帮助,
Scott
【编辑推荐】