下一代的 .NET - ASP.NET vNext

jopen 10年前

在今天举行的微软北美技术大会(TechEd North America)上,我们对外宣布了一些将会应用到下一代.NET上的技术创新点。这其中最重要的就是ASP.NET vNext——针对云开发环境优化过的ASP.NET。我们一直在对.NET的一些核心技术进行优化,尤其是在上个月举行的Build大会上发布的 .NET Native 预编译器和 .NET Next Generation JIT (“RyuJIT”)。都有新的发布版本供你试用。我们还有一些小的宣布要与大家分享。

在上个月的Build大会上,我们宣布了 .NET 基金会。现在,我们正和超过25家基于社区的.NET项目和组织沟通,邀请他们加入该基金会。大家对基金会的兴趣远超我们的预期,这是一个不错的开始。

同样在Build大会上发布的还有 .NET Compiler Platform ("Roslyn") 。它包括一个全新的C#和VB的编译器以及一些将要添加到C# 6中的新特性。该项目是一个托管在 codeplex上的开源项目,并且已经接受了一个来自社区的pull request。

Visual Studio 2013 Update 2 现在已经提供下载了,这次更新给使用Visual Studio的开发者带来了多个意义非凡的新特,包括针对Window Phone 8.1 和通用的Window程序的工具

在我们向前发展的同时,也要关注一下.NET当前的优势。目前,.NET大约有18亿个有效安装。无论从哪方面来说,这都是一个非常大的数字,同时这也为你的程序提供了一个广阔的运行平台。

TechEd中.NET的公告

下面是我们在TechEd中分享的一些关于.NET的公告。

.NET vNext

.NET vNext 作为.NET Framework的下一个重要的发布版本,第一次被我们在 TechEd 上提及。我们在TechEd和Build大会上分享了下一个发布版本中的多个新特性和组件。 你可以使用 Roslyn compilers 来编译 C# 6 和 VB,将 ASP.NET vNext 程序部署在服务器或者云端,使用 .NET Native 预编译器来编译你 Windows Store 上程序,并且可以享受由 Next Generation JIT 带来的更快的服务端或桌面程序。

针对现在比较常见的服务端优先和移动端优先的开发需求,我们对.NET做了专门的优化。用户对移动端和云端app有更高的性能需求,并且这些程序都运行在专门的硬件或虚拟环境下。我们为 Windows Store 程序提供了.NET Native 预编译器,为云端程序开发了一个云端优化模式。

.NET vNext 有一个专门为云端环境优化过的模式,该模式允许你在部署程序的时候连同他们所用到的.NET Framework的相关库一同部署(译者注:没有用到的库不会添加到里面)。由于.NET的运行时和框架中的库部署在了程序基础(app-basis)上,所以在同一台机器上,每一个程序可以运行不同版本的.NET vNext,并且可以单独升级,互不影响。这些库已经被显著的优化、精简以便减少框架占用的空间,并且将会使用NuGet来发布。在这种模式下,和WPF以及Window Forms相关的一些库已经被移除了。

我们始终以跨平台的思想来开发这个模式,在开发过程中我们和Xamarin积极合作,以确保经过云端优化过的.NET程序可以运行在装有 Mono 运行时的Mac和Linux上。.NET和ASP.NET的巨大生产力可以提供给那些使用混合开发环境的团队。

ASP.NET vNext

ASP.NET  vNext 是我们在 TechEd 上的一个重大发布。我们已经更新了ASP.NET的诸多方面,使ASP.NET的程序更容易构建并且在性能方面表现的更好。对于这些网站和服务,我们分别考虑了访问量少的情况和访问量超多的情况。我们开辟了新的场景,这些场景之前是不会在ASP.NET中发生的。

我们设计ASP.NET的时候考虑了一些关键性的设计原则,如下所示:

  • 为云环境量身打造

  • 对网站和服务使用单一的编程模型

  • 低延时的开发者体验

  • 提供高性能、高效的API和模式——使得他们既可以单独使用,又可以在一个应用中组合使用

  • 可通过命令行工具和标准格式的文件进行细粒度控制

  • 使用NuGet交付

  • 通过 .NET Foundation 开源发布

  • 可以运行在 Mono,Mac 和Linux上

ASP.NET  vNext 包括MVC,Web API,Web Pages,SignalR 以及 EF 的更新版本。对这些框架所做的主要改进在于MVC, Web API 和Web Pages已经被合并成了单一的编程模型。例如,现在控制器和路由的概念已经统一在了一起。对于同一个HTTP请求,你现在可以使用一个控制器来返回MVC视图和格式化过的Web API响应。

ASP.NET  vNext 程序是为云环境设计的。像会话状态和缓存这些服务,会根据程序的运行环境(云环境或普通的主机环境)来调整它们的行为,但是他们是以统一的API提供给开发者的。我们在底层使用了依赖注入的方法来让你的程序去适应不同的环境。由于我们修改了底层实现的代码,所以你可以在不修改代码的情况下很容易的将你的程序从内部部署移植到云环境中。

当你修改了web应用程序的代码之后,不用再去执行编译的步骤,直接刷新浏览器页面就能查看到修改后的效果。这项对提升生产力很有意义的改进得益于我们对底层CLR加载时间的优化以及新的 .NET编译器平台("Roslyn")。

你可以在下面的图片中看到 ASP.NET vNext 实际工作时的情况。第一张图展示了一个托管在命令行中的ASP.NET vNext 示例程序,你可以在浏览器中浏览。在Visual Studio中做的任何修改都会被自动编译,并且在下一次刷新浏览器的时候执行。该程序使用的就是.NET vNext的云端优化过的模式。

下一代的 .NET —— ASP.NET vNext

你也可以像之前使用Visual Studio那样,按F5键,Visual Studio 会自动打开一个web 服务器和浏览器窗口。下面这张图就使用的这种方法,但它的代码和上面的一样。

下一代的 .NET —— ASP.NET vNext

下面这张图中的程序已经为.NET vNext 框架重新配置过,并没有使用云端优化过的模式。你只需要设置一下项目的属性,这个程序就可以使用.NET框架提供的所有的API了。同样,你只需要刷新一下浏览器就可以看到配置后的结果了。

下一代的 .NET —— ASP.NET vNext

下面这个表格列出了一些我们已经构建了的场景以及这些场景可以使用的地方。

Feature

.NET vNext

.NET vNext (Cloud Optimized)

Cloud Ready

*

*

Modular Design

*

*

Dependency Injection

*

*

Consistent Tracing / Debugging

*

*

Faster Development (browser refresh)

*

*

Open Source

*

*

Full Side by Side (runtime and framework                
deployed with application)


*

Faster startup, Lower memory / Higher throughput (best of class)


*

Uses a smaller set of framework libraries


*

Enabled on Mono, on Mac and Linux


*

ASP.NET vNext 将会以开源的形式贡献给 .NET基金会(.NET Foundation)。大家不用为此感到意外,因为我们早已经把 ASP.NET Web stack 开源了。以后,所有和ASP.NET vNext 相关的东西将会通过 NuGet 发布,保持开源,并欢迎大家贡献代码。

我们在TechEd上对.NET vNext 和 ASP.NET vNext 所做的介绍只是一个开始,在我们发布最终版之前的这几个月里,我们会和大家分享更多相关内容。我们计划发布一个pre-release版本,以便收集大家的反馈。

.NET Framework 其他的一些升级和改进

最近,我们发布了 .NET Framework 4.5.2。 这包括对ASP.NET,Windows Form以及其他一些产品的做的显著改进。你现在可以在你的代码中使用4.5.2中的一些新特性了。

同时,我们还给 .NET Native 和 Next Generation JIT 添加了新的功能和使用场景。.NET Native 现在除了支持 ARM 和 x64的程序之外,还支持32位的程序。Next  Generation JIT 现在支持Windows 7 及以上的x64应用程序。 这些技术都是.NET vNext 发展道路上的关键部分。期待在未来的几个月中听到更多关于它们的消息。

针对多个平台

为了使程序和库的代码可以更容易的运行在多个平台上,我们已经花了多年的时间在这上面。一开始,我们使 Xamarin 可以使用我们的PCL程序集,Xamarin随之也作出了改变,并将这件事向前推动了一大步。最近一段时间,我们一直与Xamarin紧密合作,来使我们的.NET NuGet包可以更好和Xamarin的工具协作,以便可以更容易的把.NET程序运行在iOS和Android上。这还有很长的路要走,但是,我们已经取得了很多经验,并且会继续改进它。

在 TechEd,我们发布了一个新的可移植的统计分析工具——ApiPort。它为你提供了两项主要的数据:你代码可以运行的平台以及阻止你代码运行在其他平台上的相关依赖。 

命令行工具为程序可移植性的统计分析结果生成了一个Excel格式的报告,该报告提供了两种视图方便你的查看。它为指定的平台提供了一个高级的、以颜色区分开来的视图,同时它还提供了一个详细的列表,列出了你的代码中所有类型的成员在各平台中的支持情况。考虑到报告是一个Excel文件,你可以很容易的过滤这个列表,构建数据透视表以及做进一步的分析。

下面的图片展示了可移植性分析结果的高级视图。只显示了一个程序集,但实际上是有多个的。你可以下载 可移植性分析样例 来看一下它的原始数据。

下一代的 .NET —— ASP.NET vNext

该工具还有另一个功能,所有和依赖相关的数据(不包括程序集)会被上传到一个由.NET团队维护的 Azure 服务上。该工具上传的数据只是你代码所依赖的程序集和API的列表。我们不会记录数据的来源和使用者的信息,也不会上传你的代码和二进制文件。我们只是想要知道我们还需要为不同的平台提供些什么功能,以便使代码可以更容易的跨平台。

如果你发现很难转换至一个特定的平台,请投票选出你想要为运行你的 app 和libraries的特定平台上的工具集所附加的APIs。在整个目录运行工具集是一件很容易的事。

首次释出的版本可能缺乏一些特性,目前我们正努力为它添加支持 。Xamarin/Mono 平台目前还缺乏一些工具集。还没有考虑引入NuGet packages ,它可以使其它平台同样可以利用.NET Framework APIs,可以把它们统计为缺失的APIs。

  • 获得ApiPort tool – 这个工具很快就会发布。

用于Microsoft Service的Client Libraries

你很可能已经听说过Microsoft是一个“services first” 和“devices  first”的公司。这之间的关联便是client libraries,它使得apps访问Microsoft services变得很容易。尽管用于Microsoft Service的Client Libraries并非最新的概念,但我们目前努力为它提供多平台支持。我们从提供 Office 365 services开始,随着时间的推移我们打算添加更多的服务支持。

在TechEd在,我们发布了一个用于Office 365、.NET 和JavaScript的预览版的client libraries。你可以在Office Developer Blog上阅读最新的Office 365 client libraries授权声明。.NET Client  libraries支持WPF、 Windows Forms、Windows Store、Xamarin.iOS、Xamarin.Android和 ASP.NET apps 以及 Portable Class  Libraries,通过NuGet传递消息。

我们也提供了用Visual Studio增加libraries 到你的apps中的集成体验。这些服务需要apps注册,权限选择和一个特殊平台用户验证过程。你也需要增加下正确的client libraries至你的apps。 Visual Studio会管理好你的一切数据,作为联系人服务管理的一部分,如下所示。

下一代的 .NET —— ASP.NET vNext

你可以从Office Developer blog学习如何利用这项特性。这个项目我们使用StackOverflow 作为社区论坛,在Office365APIs tag上。请告诉我们你对client libraries和新版本Visual Studio 集成的看法。敬请注意Office  services的用途,预览版本目前还不支持商业apps。

总结

在.NET团队,我们非常乐意分享下一代的.NET技术。正如你从公告和我们在大会上发布的版本中看到的。我们组合了一些重要的技术、特性和应用场景,这些将成为.NET vNext的一部分,我们下一步的主要目标释出 .NET Framework的源码。在这篇公告中,我们主要聚集于ASP.NET vNext,下一代的Web技术和服务平台。

对.NET vNext而言,我们将在宣布重大版本之前广泛讨论主要的特性和寻求更多的反馈。我们一直积极与相应的专家和爱好者通过预览版和预发行版来沟通观点和发展趋势。这最终被证明是一个伟大的创举。反馈之多令人难以置信。非常感谢各位参与我们的 CTPs,开发者预览版,预发行版和其它我们收集反馈的项目。我们也在博客中收到了相当优质的反馈,这些反馈非常有用。敬请期待数月内的多平台的预览版,特别是 ASP.NET vNex,这将是一个历史性的时刻。

在 TechEd上,接下来的幻灯片中,你可以看到这些技术是如何集成到单一的NET Framework版本中。开源也是我们计划中非常重要的一部分,你可以在 the .NET Foundation上看到我们ASP.NET  vNext的贡献计划。 .NET的未来是非常光明的。

下一代的 .NET —— ASP.NET vNext