讨论 VS 2010 中增强的多目标支持——用于针对多版本的 .NET。
VS 2010 可以和旧版本的VS “并存”运行。.NET 4.0 还能够和旧版本的 .NET 一起“并存”安装在同一台机器上。.NET 4.0 的框架库和 CLR 都是全新的版本,完全独立于 .NET 2.0/3.0/3.5 运行。能够把 .NET 4.0 安装在已经安装了 .NET 2.0/3.0/3.5 的机器上,并配置运行使用 .NET 4.0 的应用程序,而其他的使用老的 .NET 版本运行(IIS 管理工具允许这样配置)。这就允许使用 .NET 4.0 来运行新的应用程序,而不必测试和升级原来的应用程序。
VS2008 是第一个包含多目标支持的版本。这意味着使用VS2008不仅能创建和编辑 .NET 3.5 项目,也能够创建和编辑 .NET 3.0 和 2.0 项目。这让开发人员可以更快速地升级和利用VS新特性,而不必在客户机和产品服务器上安装更新版本的 .NET。
VS2008 的多目标支持利用的是 .NET 2.0/3.0/3.5 都是运行在相同版本CLR的机制,这些版本之间的主要区别是它们的框架类库。编辑器产生的是相同的IL输出,调试器能够在相同的CLR引擎上调试,支持多目标的IDE主要用于过滤给定版本.NET支持的新程序集和项目模板。
这样的多目标支持体验是有用的,尽管还不完美。VS2008内部的智能感知问题显示.NET 3.5 框架类库的类型和成员(即使你在使用.NET2.0)。这意味着你有时一不小心就使用了 ASP.NET 3.5 中的方法,即便你是正在 ASP.NET 2.0 项目上工作。
VS2010 做了主体架构的变化来更好更精确地支持多目标。
VS2010 现在带有对每个版本的 .NET 进行“引用程序集”的功能。“引用程序集”只包含特定框架程序集的元数据,而不是它的真实实现(占用更小磁盘空间)。当针对特定版本的 .NET 框架时,这个元数据足够确保 VS2010 能够提供100%精确的智能感知。它还意味着在设计器内部通过属性窗格可以暴露出属性,对象浏览器中可以列出API,以及IDE内部其他各个地方都可以反应出精准的API版本签名。
VS2010 调试器、描述器(profiler)和编译器也更新了,都能够针对多个版本的 CLR。
要更好地理解这些新的多目标特性工作原理,让我们使用 VS2010 来创建一个新的 ASP.NET Web 应用程序。使用【文件】【新建项目】菜单命令打开“新建项目”对话框。在对话框顶部下拉列表选择版本来过滤出 .NET 2.0 支持的项目模板。然后创建一个新的 ASP.NET 2.0 Web 应用程序项目:
因为这个项目针对的是 .NET 2.0,VS2010 会自动地过滤工具箱和标记智能感知,使其只允许我们使用 ASP.NET 2.0 支持的控件。不像 VS2008,VS2010 属性窗格现在能自动地过滤,只显示那些在 ASP.NET 2.0 按钮控件上支持的属性:
在编写代码时,VS2010 现在也可以只显示 .NET 2.0 支持的类型和方法/属性/事件的代码智能感知了:
当使用内置的 VS Web服务器运行应用程序的时候,它将使用 ASP.NET 2.0 版本运行(VS2010 的调试器也将调试 CLR 2.0 进程):
可选地,可以把项目重新定位到更新版本的 .NET,只要在解决方案资源浏览器中右击项目,打开属性对话框,然后选择“目标框架”下拉框中想要选择的 .NET 框架即可:
可以选择各种不同的 .NET 版本。因为使用的针对元数据和智能感知的引用程序集能够支持任何版本,所以甚至能够使用未来服务包(future service packs)分发它们的版本,如果它们引入了任何新 API 的话。
在本例中,选择 .NET 4.0。VS2010 会自动地把项目的引用程序集和web.config文件升级到正确的反应新版本。
确定之后,VS2010 会过滤工具箱和标记智能感知,使之展示出所有在 ASP.NET 4 版本中可用的所有新控件和属性:
现在项目升级到了使用 .NET 4.0,VS2010 现在也能为新类型和方法/属性/事件展示代码智能感知了:
最后当我们使用内置的 VS Web服务器运行应用程序时,VS2010 会使用 ASP.NET 4.0 版本运行它:
VS2010 的多目标支持让项目能够针对 .NET 4.0, .NET 3.5, .NET 3.0 和 .NET 2.0。这样就能够利用新的工具特性,而不必立即升级客户机和服务器使其在 .NET 4.0 上运行应用程序。增强的多目标支持将确保这种体验比以前更好更精确。