浅析.NET 4.0和Visual Studio 2010多定向支持

开发 后端
这里将讨论经过增强的Visual Studio 2010多定向支持,该支持允许你使用和定向.NET的多个版本。我们在VS 2010版本中做了重大的架构级工作,实现了若干个新的多定向特性,提供了更佳的体验。

Visual Studio 2010多定向支持(multi-targeting)相比较Visual Studio 2008有所增强,同时Visual Studio 2010还支持同时安装之前的较低版本。这些都能让程序员在开发过程中做到更好的兼容性和测试的合理性。

理解并列(Side-by-Side)的含义

Visual Studio 2010可以和Visual Studio的早期版本并列(side by side)安装。这意味着,你可以在安装了Visual Studio 2008/Visual Studio 2005/Visual Studio2003的同个机器上安装Visual Studio 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用于新的应用,而没有必要测试和升级所有现有的应用。

Visual Studio 2008多定向支持

Visual Studio2008是第一个包含.NET多定向支持的Visual Studio版本,这意味着,你不光可以使用Visual Studio 2008创建和编辑.NET 3.5 项目,也可以创建和编辑.NET 3.0 和 .NET 2.0项目。这允许开发人员更快地升级和充分利用新的Visual Studio工具特性,而不必要求在运行他们应用的客户机和生产性服务器端安装新一点的.NET 版本。

Visual Studio2008的多定向支持利用了.NET 2.0, .NET 3.0, 和 .NET 3.5都是在同个版本的CLR之上运行的这个事实,而这三个.NET 版本的主要区别在于它们的框架类库。结果是,Visual Studio的编译器能够生成同样的IL输出,调试器能够针对同个CLR引擎进行调试,IDE对多定向的支持主要着重于过滤掉不支持某个给定.NET 版本的新的程序集和项目模板的的显示。

这个多定向体验是可行的,尽管不完美。Visual Studio 2008中的Intellisense总是显示.NET 3.5版本的框架类库的类型和成员(即使你定向的是.NET 2.0)。这意味着,你有时候会在无意中使用一个ASP.NET 3.5才有的方法,尽管你是在开发一个ASP.NET 2.0 项目。

Visual Studio 2010多定向支持

我们在Visual Studio 2010中做了一些非常重大的架构级改动,来促成更好和更精确的多定向支持。

Visual Studio 2010现在给每一个.NET版本都配置了我们称之为“引用程序集(reference assemblies)”的东西。“引用程序集”只包含某个特定框架程序集的元数据,而不是它的实现(因此所占硬盘极小)。但这个元数据足够确保Visual Studio2010总是能够在定向某个.NET 框架版本时提供百分之百精确的intellisense。这还意味著,通过设计器中属性表格呈示的属性,对象浏览器中的API列表,以及IDE中所有其它各种地方都能精确地显示出确切版本的API签名。

我们还更新了Visual Studio2010调试器,profiler和编译器,使之能够定向多个CLR版本。

使用Visual Studio 2010多定向支持

为更好地理解这些新的多定向特性的工作原理,让我们用Visual Studio 2010来创建一个新的ASP.NET Web应用。我们先用 “文件->新项目”菜单命令调出“新项目”对话框,使用对话框顶部的版本下拉框过滤项目模板,使之只显示.NET 2.0所支持的模板,然后创建一个新的ASP.NET 2.0 web应用项目:

创建一个新的web应用项目

因为这个项目定向的是.NET 2.0,Visual Studio 2010 会自动对工具箱和标识intellisense进行过滤,只允许我们使用那些随ASP.NET 2.0发布的控件。不象Visual Studio 2008,Visual Studio 2010中的属性表格现在自动过滤,只显示那些ASP.NET 2.0按钮控件所支持的属性:

只显示按钮控件所支持的属性

在编写代码时,Visual Studio 2010现在也只显示.NET 2.0所支持的那些类型和方法/属性/事件的代码intellisense。在下面,在键入“Response.Re”时,你可以看到ASP.NET 2.0 “Response”对象的intellisense:

“Response对象

在使用内置的Visual Studio web服务器运行应用时,它会使用 ASP.NET 2.0版本来运行(Visual Studio 2010调试器调试的是CLR 2.0进程):

使用内置的Visual Studio web服务器

将项目从.NET 2.0 移植到.NET 4.0

或者,我们也可以在解决方案管理器中右击项目,调出它的属性对话框,来将项目重新定向,使之在.NET后期版本下工作。我们可以选择对话框上的“定向框架(target framework)”下拉框,选择我们想要定向的.NET框架版本:

.NET框架版本

我们可以从上面的各种不同的.NET版本中任选一个。该列表中包括了一个"Server Core(服务器核心)” profile,支持无界面的Windows Server 2008 R2版本,它不支持某些APIs。因为我们用于元数据和intellisense的引用程序集能够支持任意一个版本,如果它们引进任何新的API的话,我们甚至能够在将来的服务包中发布它们的版本,以促成百分之百的精确性。

在这个示范中,我们将选择把项目移植到.NET 4.0,完毕后,Visual Studio 2010将自动地更新项目的引用程序集,以及项目的web.config文件来适当反映出所用的新版本。

做完这一步后,Visual Studio 2010 会过滤工具箱和标识intellisense,显示ASP.NET 4.0版本中所有新的控件和属性。 例如,下面的属性表格现在显示了新的“ClientIDMode”属性,该属性是ASP.NET 4.0中所有控件都有的,它能让你控制客户端ID是如何输出的,以避免丑陋的客户端id(这是ASP.NET 4.0中的一个新特性,我会在以后的博客中讨论):

ClientIDMode属性

至此,我们将项目升级到使用.NET 4.0,Visual Studio 2010现在也会显示.NET 4.0中的新的类型和类型中的方法/属性/事件的代码intellisense。例如,在下面,你可以看到 ASP.NET 4.0 “Response” 对象上的一些新的redirect方法(是在前面项目定向.NET 2.0时没有出现的):

新的redirect方法

上面新的Response.RedirectPermanent()方法方便了发出“HTTP 301 Moved”回复,该回复可以避免你的网站在搜索引擎中积存失效的链接。URL导向引擎现在也同时为基于ASP.NET Web Forms 和 ASP.NET MVC的应用所支持,新的Response.RedirectToRoute()方法允许你轻松地重新定向到在其中声明的路径。

最后,在我们使用内置的Visual Studioweb服务器运行应用时,Visual Studio 2010现在会使用ASP.NET 4.0版本来运行这个应用:

使用内置的Visual Studio web服务器

结束语

Visual Studio 2010多定向支持允许你开发定向 .NET 4.0, .NET 3.5, .NET 3.0 和 .NET 2.0的项目。它允许你开始利用新的工具特性,而不必马上将运行你应用的客户机和服务器升级到.NET 4.0。这改进了的多定向支持将确保其体验比以前更好,更精确。

【编辑推荐】

  1. Visual Studio 2010响应Ribbon控件消息
  2. 微软称C++将得到Visual Studio 2010更多支持
  3. Visual Studio 2010新特性:动态语言功能
  4. 微软对Visual Studio 2010的Bug熟视无睹?
  5. Visual Studio 2010 Beta1试用手记
责任编辑:彭凡 来源: blog.joycode.com/
相关推荐

2009-08-31 10:08:24

VS 2010.NET 4Visual Stud

2009-12-02 10:01:50

Visual Stud

2009-11-02 14:16:43

Visual Stud

2009-09-02 10:26:59

.NET 4.0多显示

2010-03-31 14:13:23

Visual Stud.Net Framew

2010-02-23 16:24:47

Visual Stud

2010-01-14 14:12:14

Visual Stud

2009-11-02 14:06:59

Visual Stud

2009-09-07 09:22:17

Visual Stud代码片段

2009-11-10 09:13:47

Visual Stud

2009-12-02 09:43:38

Visual Stud

2010-11-29 08:57:20

Visual Stud.NET 4

2009-07-07 09:52:17

Visual Stud

2009-11-10 13:43:37

Visual Stud

2009-10-20 09:59:44

Visual Stud

2009-08-05 11:02:30

Visual Stud

2010-12-13 10:34:09

Visual Stud

2010-04-01 15:10:06

Visual Stud

2009-06-04 09:43:42

Visual StudVisual Stud

2009-11-11 09:48:06

Visual Stud
点赞
收藏

51CTO技术栈公众号