早些时候在 Telerik 网站上下载了一份题为 20 Burning Questions on ASP.NET Answered 的文档,很好地解答了关于 .NET 开源这个话题的一系列受关心的问题。最近我将其翻译为中文,在 ASP.NET vNext 即将发布之际,希望能够为关心 .NET 开源,却又心生疑虑的朋友们带来更多信息。它也可以为各位技术布道师在演讲和交流时提供素材。

原文由 Telerik 发布,因此其中包含几个有关 Telerik 的问题。Telerik 是一家专注于提供基于 .NET 平台开发者工具的软件企业,著名的 Fiddler 就是 Telerik 的产品。

以下是翻译全文。

1. 听说 .NET 开源了?

2014年11月12日对于微软技术栈来说,必然是会被铭记的巨大的转折点。在纽约举办的 Connect() 大会宣布,备受钟爱的 .NET 框架基于 MIT 协议完全开源了。开源的范围  包括 .NET 基础框架的所有组成部分,即通用语言运行时(CLR),即时编译器(JIT),垃圾回收(GC),以及 .NET 框架类库(FCL)。现在就可以更自由地查看和 fork 源代码了,还可以编译再发布。微软承诺会接受来自社区有价值的贡献,(微软会继续主导 .NET 的开发,因此)可以对 .NET 基础类库的质量放心。



2. 开源是不是意味着质量低了、风险大了?

首先,让我们持着开放的心态去理解一下开源软件。基本上,这意味着软件的源代码可以被公开地查看,并基于各种许可证约束可以在一定的范围内以各种形式被使用,比如学习、修改和再分发。开源软件的一个基本特点是它以协同的方式开发,所以能够接受持续的反馈。如果对软件中的一部分不满意,就将源代码拉取下来,按自己的需求去修改。

开发者社区的参与对开源软件大有裨益:有价值的贡献被择扰选取到代码中,并提供给所有用户。现在,如果你仍觉得软件开源是难以接受的,或者只是营销噱头,那可以好好调整一下心态、感受一下开源的大愿景了。企业确实需要考虑在开发技术栈中使用开源软件的法律影响,但整体上看,开源带来的更多的是好处。至于 .NET 的开源,微软仍会守住最后一道门槛,在质量和风险方面,大可不必担心。所以,尽情地拥抱开源吧,这是一件了不起的举动。


3. 这是否意味着使用 .NET 的方式可能会发生变化?

是,也不是。

下面这幅关于下一代 .NET 的图景描绘了整个框架的发展方向:似曾相识,却又如此不同。.NET 本身所处的角色和使用方式上发生的根本性的改变提供了更多灵活性。.NET 一直被大量用于桌面、Web 和 移动端的开发,在服务器上的安装量就更多了。下一步,.NET 将会更专注于云、终端设备和服务器,并为它们优化。

 .NET 将只是一个通用功能的子集(即运行时,编译器,以及基础类库),而其余的,我们可以选择真正会用到的部分来下载。在过去,要升级服务器上的 .NET 框架,常常需要等待 IT 部门或者一个复杂的流程。现在你可以将 .NET 框架直接包含在应用程序中,并同时运行多个版本。太棒了!

### **4. 有哪些新的特性与新的 .NET 一起发布?**
新的 .NET 框架包含不少语言和编译器级别的增强。首先是 [Roslyn](http://blogs.msdn.com/b/csharpfaq/archive/tags/roslyn/),.NET 编译平台。Roslyn 能够创造性地在云端编译 C# 和 VB,而且有 Visual Studio 这样的 IDE 和第三方集成支持。Windows 商店应用程序能通过 [.NET Native](http://blogs.msdn.com/b/dotnet/archive/tags/dotnetnative/) 提前编译的机制获得更好的性能:更快的启动时间,以及更少的内存占用。桌面和服务器应用程序得益于下一代 64 位 [RyuJIT](http://blogs.msdn.com/b/dotnet/archive/tags/ryujit/) 编译器。.NET 这些优化,适用于所有应用类型,同时也可以提高开发体验。

5. 我经常听说 .NET 基金会,它到底是什么?

回到 2014 BUILD 大会,Scott Guthrie 宣布了 .NET 基金会的成立。其主页上有表述:“.NET 基金会以独立社区的形式围绕为增长中的一系列开源的 .NET 技术的开发和协作提供支持。”基金会已获得了充分的支持,并已经主导了数量可观的 开源软件项  目,包括来自微软的以及受支持的合作方的,实际为这些开源 .NET 库提供了管理协调职能。这也包括下一代 ASP.NET。



6. ASP.NET vNext 和 ASP.NET 5 两个概念有什么区别?

谢天谢地,它们是同一个概念。自 ASP.NET 平台下一个版本的计划公开有一阵了,自那以来,它通常以 ASP.NET vNext 的形式被引用。不过,随着下一个版本的正式发布,ASP.NET vNext 的正式名称就是 ASP.NET 5。在将来的交流中,那就是你会经常看到的。



7. 那么 ASP.NET vNext 也要开源了?

是的。顺应趋势,ASP.NET vNext 完全开源。不需要任何特殊的权限就可以查看、编译和修改源代码,也可以执行 pull 和 fork 操作。ASP.NET vNext 在 GitHub 的主页是 [github.com/aspnet/home](https://github.com/aspnet/home)。不用担心,没有人会动你的奶酪,开源只是为了提供更多灵活性。

8. ASP.NET vNext 包含了哪些开发框架?

ASP.NET vNext 将多个开发框架汇聚到统一的 MVC 6 编程模型中。这包括最新的 MVC、Web Pages、Web API、SignalR 和 Entity Framework。可以在同一个 Controller 返回 MVC 视图和格式化的 Web API 响应,基于相同的 HTTP Method。

9. 听说 ASP.NET 要被分成很多小的部分?

是的,新的 ASP.NET 框架完全是模块化的:选择自己需要的部分,并通过 NuGet 安装它们。不过,无需担心,仍可以像现在那样使用完整的框架。将来在服务器上运行的 .NET 肯定会很有意思。ASP.NET 框架被完全重写了,它独立地成为一个小巧的 .NET 体系,专门用于开发现代 Web 应用程序。你可以用它来优化运行在云中的 Web 应用程序,使用模块化工具挑选需要的框架中的组件。



10. ASP.NET 运行时有什么变化吗?

我们来看看新一代的 ASP.NET Web 应用程序是怎么运行的。它们当然还是要基于 .NET 框架,不过有了一些有趣的变化。过去,.NET 框架以单一的、完整包含的安装包的形式提供,随着功能的增加,安装包大小也持续增长。当然,Windows Server 上已经安装了 .NET 框架,可以运行所有类型的应用程序,但是 ASP.NET Web 应用程序实际上并不需要框架中所有的部分。这也使得在服务器上更新 .NET 框架变得不那么轻松随意,需要很多计划和流程的工作。

ASP.NET 5 通过运行三个运行时来提供灵活性:

1) 完整的 CLR
由 Visual Studio 开发的 ASP.NET 5 项目的默认运行时会是完整的 .NET 框架。它提供完整的功能,与 ASP.NET 5 之前的机制完全一致,是向下兼容的最好选择。
2) Core CLR (针对云优化的运行时)
Core CLR 是一个为 ASP.NET 5 打造的、小巧的、基于模块化的运行时。它已重构为以组件化的形式组织,所以只需要通过 NuGet 安装真正所需的部分。与 200 MB 左右大小的完整版 .NET CLR 相比,.NET Core CLR 只有 11 MB。Core CLR 可以与 Web 应用程序一起部署,不同版本的 CLR 可以同时运行。现在,是不是看到了给服务器环境带来的好处?
3) 跨平台的 CLR
微软将为 Linux 和 Mac OSX 发布一个基于 Mono 的跨平台运行时,它让你像在 Windows 上一样开发并运行 ASP.NET 应用程序。这也是一样的 Core CLR,只是不在 Windows 上运行。
可以通过项目配置文件方便地为 ASP.NET 5 应用更改目标运行时。


11. .NET 应用程序可以在 Windows 之外运行?

我们不是井底之蛙,Windows 不是世上唯一的系统:这一理念在微软内部的转变也很明显地体现在下一个版本的 .NET 框架中。正式的 .NET Core 发行包将会包含 Linux 和 OS X 版本。这是一件大事!关注跨平台的开发者现在更愿意使用 .NET 了,Web、桌面、云,以及移动开发——几乎所有平台都可以由 .NET 搞定。而且,现在可以在 Mac 上直接开发 ASP.NET Web 应用程序了。如果你的应用针对多个平台,现在可以像实现 Windows 版本一样,使用 C# 来开发原生 iOS 和安卓应用程序。基于 HTML5/CSS/JS 以及 Apache Cordova 开源框架,还能够在单一代码库中构建跨平台 Hybrid 移动应用程序。这个变化很大,却肯定会受到欢迎,这为在非微软系开发者中培育对 .NET 的喜爱提供了潜力。



12. 那么现在可以直接基于 Mac 开发 ASP.NET 应用程序了?真是思维的巨大颠覆!

是的,请相信这是真的。.NET Core 提供了在 OSX 和 Linux 上的支持之后,它为 ASP.NET 开发者构建针对 .NET Core 的应用程序带来了新的可能性。确实可以直接在 Mac 上开发 ASP.NET 应用程序了,已经有支持 ASP.NET 的 Yeoman 生成器了,可以使用命令行工具直接在 OSX 中运行 ASP.NET。



13. OmniSharp 是什么?

OmniSharp 是一个非常酷的工具(initiative),它将 .NET 开发的优势带到任何平台和编辑器中。正如预期,它本身也是开源的——有多个 ASP.NET 团队的成员也为它贡献代码。OmniSharp 是一系列项目的统称,其每个项目具体目标不同,但都是将强大的 .NET 开发体验带到不同编辑器中。其中包含 Sublime Text,Atom,Emacs, Brackets, VIM 等等。通过它,能获得像 VS 里那样的智能感应功能,这也得益于 Roslyn 以及其他开源的 C# 解析器的强大功能C# in Sublime Text 已经成为了一等公民,它提供了你期待从富编辑器中获得的所有功能。现在几乎可以在任何平台开发下一代 ASP.NET Web 应用程序——.NET 开发者世界变得有趣了起来。



14. 有了这些很好的完善之后,意味着 ASP.NET WebForms 的死期到了吗?

我们大谈现代化的 MVC 和 ASP.NET 框架的时候,很容易让使用 ASP.NET Web Forms 开发 Web 应用程序的人担心。请淡定,它不会丢,它哪儿也不会去!Web Forms 将继续是便捷、经济的开发 Web 应用程序的方式,而且它仍然是 ASP.NET Web 开发平台的构成部分。

实际上,微软仍然关注 Web Forms,向它添加新的特性来增加开发体验,让它保持与典型的 Web 开发实践步伐上的一致。那些运行 Web Forms、MVC 5、Web API 2、SignalR 2、Web Pages 3 或者 Entity Framework 6 的应用程序在新的框架中还会得到完整的支持,并没有变动。不过,应该是需要使用完整的 CLR 模式来运行这些应用程序,因为只有完整的 CLR才提供了与早期版本完整的兼容性。

15. 在 Web Forms 体系中有什么新的特性,我需要更新现有的应用吗?

 在 ASP.NET 5 中包含的 Web Forms 4.6 提供了下列新特性:

  •  HTTP 2: 新的 HTTP 处理管线
  •  异步模型绑定: 用于以强类型的方式来处理数据
  •  Roslyn CodeDOM 编辑器: 更快地编译页面对应的 C# 代码文件(Code-behind) 现有的 Web Forms 应用程序可以在不做任何修改的情况下继续基于 .NET 4.6 在 IIS 中运行。你没听错!不需要做任何修改即可让现有 Web Forms 应用程序运行在最新的 .NET 框架上。但不能使用“为云优化”的运行时版本来运行 Web Forms 应用,而只能使用完整的 .NET CLR。可以从 Channel 9  视频网站了解更多 Web Forms 4.6 的相关内容。



16. ASP.NET 5 中还有其他新东西吗?

现在有了全新的 HTTP 处理管线,能够提供巨大的吞吐能力。
新的 [K 运行时](https://github.com/aspnet/dnx)(注释1) 是 ASP.NET vNext 的核心。它有内置了[版本管理](https://github.com/aspnet/Home/wiki/Version-Manager)和[包管理](https://github.com/aspnet/Home/wiki/Package-Manager)工具,以及一系列相关工具。
ASP.NET MVC 有了新的魔法语法 [Tag Helpers](http://www.jeffreyfritz.com/2014/11/asp-net-tag-helpers-the-basics/)。多了解一些吧,它们确实很酷。
ASP.NET Web 应用程序现在除了能宿主在 IIS 里,也可以在自己进程里。

17. 那么,将来的 ASP.NET 既能运行在本地,也能在云上?

是的。可以将 ASP.NET 应用程序托管企业的自有基础设施中的 IIS 里,与以前一样。可以继续使用完整的 .NET CLR,它保持原有方式。除此之外,还可以选择 Core CLR,它是为云优化的——能够选择要在服务器上运行的特定部分。这让 .NET 框架的升级更容易,因为不同应用的运行是相互独立的。ASP.NET vNext 也是云友好的。比如 Session 和缓存提供了一致的 API;相对于经典服务器,现在有了更多适应云环境的行为特性;比如我们热切期盼的依赖注入也在整个 ASP.NET 中受支持。



18. 有没有 ASP.NET 开发人员工具方面的增强?

在 Visual Studio 里,有大量 .NET 开发工具方面的增强,但关于新的 Visual Studio 发行版的消息最受关注。记得 VS Express 版本吗?虽然它们确实是免费的,但特定版本的 VS Express 只能开发一种类型的应用程序。现在,有了全新的 Visual Studio 社区版——包含了所有 Express 版本的发行版。它是免费的,而且可以用它来开发任何类型的 .NET 应用程序:Web、云、桌面或者移动应用。它是一个完整功能的 IDE,支持诸如插件与扩展这样的高级功能。当然,也可以使用 Visual Studio 社区版开发新的 ASP.NET 5 应用程序。

工具方面最好的消息,体现在提高了 ASP.NET 开发人员的调试体验。比如说,你正在构建一个复杂的企业应用程序;每次更改了代码文件中的 .NET(C#/VB) 代码,就需要做一次生成操作,以期在浏览器看到最新的变更,是吧?有了 ASP.NET vNext 之后,只需要修改代码、保存文件,然后刷新浏览器就可以查到新的变更了。我指的不是 HTML 或其他界面的部分,而是 C#/VB 的服务端代码。得益于 Roslyn JIT 这个很好的 .NET 编译平台,编译可以即时进行,而且快多了。
2015 年,我们还可以使用到备受期待的 Visual Studio 2015,包括为客户端开发提供的 Bower/NPM/Grunt 支持里集成的包管理器和生成工具;还能使用 C# 6.0 提供的特性来提高服务端开发的编程体验。


19. 我在 Web Forms 应用程序里使用了 Telerik UI Ajax 套件。它能在 ASP.NET 5 里工作吗?我要改些什么吗?

淡定。还是之前那句话:“没有人会动你的奶酪”。如果你在 Web 应用程序中使用了 Telerik UI Ajax 控件,它将在 ASP.NET 5 中继续正常工作,当基于完整的 .NET CLR 时仍具有完整的 WebForms 支持。放心好了,当 ASP.NET 5 正式发布后, Telerik 工程师将细致地测试我们的系列套件以期获得完全的兼容能力。所以你这边不需要做任何修改,一切都会像以前一样。

我们  对未来的 ASP.NET Web 开发感到兴奋,并且将会在 ASP.NET Ajax UI 产品套件中倾注巨大的投资。要了解更多有关产品使用和路线计划,可以查阅我们的 ASP.NET UI 博客网站


20. 在 ASP.NET vNext 发布之前,Telerik 还有哪些动作?

简单来说,很多创举!我们的 ASP.NET MVC UI 套件就令人兴奋,它提供了服务端的 MVC 包装,用于在客户端呈现基于 HTML 5 的现代化 Kendo UI 部件。接下来的更新包括完整的 MVC 6 和 .NET Core 运行时的兼容性支持。



还有一个问题:好吧,我接受了你兜售的 ASP.NET vNext!我从哪里可以找到更多资料,发布计划又是怎样的?
ASP.NET vNext 的主页是 asp.net/vnext,你可以将其加为书签来持续关注最新的声明和社区活动更新。ASP.NET 5 初步计划的发布时间是在 2015 年第一季度发行第一个 beta 版本,在 2015 年夏天后半期发行最终版本。(注释2) 真是激动人心的时刻!


结论

我知道,读完这些内容是漫长的过程。但我希望你能相信,未来的 ASP.NET 开发确实很酷。让我们拥护变化、迎接更美好的新时代吧。最强大的工具;以及一个开源、跨平台的,用于创建下一代精妙的 Web 应用的平台——那就是 ASP.NET。Telerik 将会为你提供开发所需的一切。

现在,让我们一起投入到编码中吧!


作者 Samidip Basu 是一位技术专家,Apress/Pluralsight 作者,演讲者,微软 MVP,软件艺匠信奉者,机械爱好者,Telerik 开发者支持人员。Sam 有深厚的的开发人员背景,他现在主要关注基于微软和 Telerik 技术栈现代化 Web、移动端和云开发平台的支持。他的闲余时间会与妻子一起旅行、学习烹饪。在 Samidipbasu.com 可以浏览更多关于 Sam 的信息。

———————————
注释:
  1. K 运行时现在已经重命名为 dnx 运行时,上面的链接也已更新为 dnx 的链接。
  2. 目前 ASP.NET 5(2015.11)尚未最终发布版本,可以在此处查阅最新的时间表。
特别向 陶弢 为本文译解提供的宝贵建议表示感谢。