2015 年 10 月

第 30 卷,第 10 期

ASP.NET - 借助 OmniSharp 和 Yeoman 随时随地使用 ASP.NET 5

作者 Sayed Ibrahim Ibrahim | 2015 年 10 月

由于开发团队在工具的选择上更加多样化,框架必须也要提供避免冲突的选择。ASP.NET 5 已经接受跨平台支持,包括通过 OmniSharp 等开源工具进行开发,以及使用 Docker 等容器在 Microsoft Azure 中进行托管。在本文中,我们将向你演示如何在你所选择的平台上开始使用 ASP.NET 5。我们将介绍使用 ASP.NET 5 开始开发 Web 应用程序所需的所有内容。

使某个项目快速上手可能很困难,因为现代 Web 应用程序开发也充斥着各种选择。作为 Visual Studio 用户,你可能非常受益于 IDE、内置模板以及协助你开始进行新项目的 Web Essentials 等工具所带来的优势。但不使用 Windows 和功能丰富的 IDE(例如 Visual Studio)的开发者通常依赖于 Yeoman、Grunt 或 Gulp 或者 Node.js 等命令行工具来构造和生成 Web 应用程序。现在 ASP.NET 5 已经完全重建,同时考虑到了所有平台,针对开发者工具采用“选择为王”的方法。现在,你不仅可以将它用于 Windows 项目,还可以用于 Linux 和 OS X。下面简要介绍一下如何使用 ASP.NET 5 从非 Windows 操作系统的角度设置和创建项目。

设置环境

你需要执行几个步骤来完成环境设置,但面向 OS X 和 Linux 的这一过程有详细的文档说明。你可以在 bit.ly/1Ljhj68 上找到分步说明。在本文中,我们假设你们中的大多数都使用的是 OS X。

第一步是安装我们将用于生成 ASP.NET 5 Web 应用程序的工具。最终,CoreCLR (github.com/dotnet/coreclr) 将会作为框架的基本运行时。但是就目前而言,ASP.NET 5 仍需要 Mono 运行时。若要安装 Mono,使用 HomeBrew (brew.sh):

$ brew install mono

接下来,安装 .NET Version Manager (DNVM)(这是一组命令行实用工具),使你能够更新和配置 .NET 执行环境 (DNX),该环境主要支持使用 .NET Core 5 (docs.asp.net/en/latest/dnx/) 的跨平台开发。若要从你的终端安装 DNVM 和 DNX,请执行以下命令:

$ brew tap aspnet/dnx
$ brew update
$ brew install dnvm

现在你已安装 Mono 运行时,以及 DNVM 和 DNX。若要检查 DNVM 版本,可在终端键入“$ dnvm”,如图 1 所示。注意,如果你的 shell 未识别 dnvm 命令,你可能需要执行“source dnvm.sh”来加载它。

检查 DNVM 版本
图 1 检查 DNVM 版本

选择编辑器

如果你使用的是 Windows,则无须赘述,你将使用 Visual Studio 的一些版本。但是在 OS X 或 Linux 上,你会有多种选择,从 TextMate 等简单的文本编辑器,到 Sublime、Atom、Emacs 或 Vim 等各种受欢迎的编辑器。但跨平台开发编辑器的列表中新添了一项 – 来自 Microsoft 的 Visual Studio Code (code.visualstudio.com) – 这是我们选择的编辑器,它不仅面向 ASP.NET 5,还面向 AngularJS、Node.js 和一般的 JavaScript 开发(见图 2)。

Visual Studio Code 欢迎页
图 2 Visual Studio Code 欢迎页

无论你决定使用哪个工具,让 OS X 和 Linux 上面向 ASP.NET 5 的编辑器散发光彩的关键在于 OmniSharp (omnisharp.net)。Visual Studio Code 附带内置的 OmniSharp;其他编辑器具有扩展或“外接程序”库,可以从其中下载组件。

开始你的第一个项目

在不使用功能丰富的 Visual Studio 2015 开发环境的情况下,你必须依赖其他方法在 OS X 上开发 ASP.NET 5 应用程序。进入 Yeoman (yeoman.io) 和 ASP.NET 生成器项目 (bit.ly/1MPe5KY)。Yeoman 是在 Node.js 之上生成的基架平台,使你能够为项目或代码文件生成基于模板的生成器。它是一个命令行实用工具,并且由于它在 Node.js 上生成,因此你首先需要注意一些依赖项。

首先,通过 HomeBrew 或直接从 nodejs.org 安装 Node.js 和节点程序包管理器 (NPM):

$ brew install node

完成后,使用 NPM 安装生成器:

$ npm install -g yo generator-aspnet

如果你还没有使用 Bower、Grunt 或 Gulp,也同样要获取这些工具。你需要熟悉这些属于新的现代开发堆栈的工具(可参阅本期文章“适用于 Web 开发的现代工具: Bower”):

$ npm install -g bower grunt-cli gulp-cli

Bower 是用于前端 Web 开发的程序包管理器,也是用于 JavaScript 和 CSS 等 Web 资源的存储库。Grunt 和 Gulp 是用于执行脚本和映像缩小等生成过程以及转译(TypeScript 或 CoffeeScript)的任务运行库。

这样就设置好了开发所需的工具,而无论选择的编辑器是什么。现在,为了启用新的项目类型,执行“$ yo aspnet”以初始化 Yeoman 生成器,然后选择你希望创建的项目。在本例中,选择“Web Application Basic [without Membership and Authorization].”(如图 3 所示),然后键入项目名称并按 Enter。

在 Yeoman 中选择项目类型
图 3 在 Yeoman 中选择项目类型

生成器完成之后,你可以选择使用 Kestrel 跨平台 Web 服务器运行应用程序。但首先,你需要安装 NPM、Bower 和 NuGet 依赖项,因此运行还原命令来获取这些资源:

$ cd [projectname]
$ dnu restore

此命令将为 project.json 文件中引用的项目下载所有 NuGet 程序包。

(我们还运行了“$ npm install”和“$ bower install”以确保 JavaScript 和 UI 组件资源是最新的,但这并不是必需的)。

接下来,运行命令启动 Kestrel:

$ dnx . kestrel

(注意,在 ASP.NET 5 Beta 7 发布后,此命令将更改为简单的“dnx kestrel”。)

“Started”一词将出现在终端窗口,你现在将能够通过浏览到 http://localhost:5000 来查看网站。此时,你已在未使用 Windows 或 Visual Studio 的情况下创建项目、还原程序包并运行站点。接下来,将在 Visual Studio Code 中打开代码。

编辑 ASP.NET

如前所述,Visual Studio Code 是一款用于跨平台开发的出色编辑器。以通常的方式或使用键盘快捷方式“code”从项目文件夹打开项目。(有关如何设置“code”快捷方式,请参阅 bit.ly/1LwonPN。)

在 Visual Studio Code 中打开源文件夹后,便可以开始开发应用程序了。图 4 显示了当你在 Code 中打开项目时的结果。

在 Visual Studio Code 编辑器中打开项目
图 4 在 Visual Studio Code 编辑器中打开项目

正如你所看到的,你获得了为所期望的 C# 文件突出显示的完整语法 – 在 Mac OS X 中! 如果你仔细观察,你会看到第 2 行的游标旁有一个灯泡。该灯泡就像在 Visual Studio 中那样,可以用于执行上下文相关的快速操作。在本例中,Visual Studio Code 提供了“Remove Unnecessary Usings”的建议。现在,让我们将新文件添加到你的项目中。

若要将新文件添加到你的 ASP.NET 5 项目,不需要执行任何特别的操作。只需将文件添加到目录中,它便自动包含在内。在 Code 中,你可以使用树视图中的“添加文件”按钮,或使用 Ctrl+N 添加新的空白文件。如果你希望从一些初始内容着手,你可以使用“yo aspnet”。 若要将文件添加到现有的 ASP.NET 5 项目,可使用以下语法调用子生成器:

$ yo aspnet:<Name> <options>

为了对此进行演示,让我们为 Web 应用程序的新“管理员”页面添加新的 MVC 控制器和视图。我们首先将添加 MVC 控制器。当 yo aspnet 执行时,它会将文件添加到当前工作目录,因此你需要先将目录更改为当前目录,然后再执行命令。若要添加 MVC 控制器,可在 Controllers 文件夹中执行以下命令:

yo aspnet:MvcController AdminController

执行命令后,你将在当前工作目录中看到新的文件 Hello.cs,内容如图 5 所示。

图 5 Hello.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
// For more information on enabling MVC for empty projects, visit
// go.microsoft.com/fwlink/?LinkID=397860
namespace MyNamespace
{
  public class AdminController : Controller
  {
    // GET: /<controller>/
    public IActionResult Index()
    {
      return View();
    }
  }
}

该文件看起来与你在 Visual Studio 中使用“文件”|“新建项目”然后选择 MVC 控制器时是一样的,不同的是此处的命名空间名称不会自动更新,而是硬编码为 MyNamespace。现在,你需要更新命名空间声明以符合你的期望,但未来的版本中会对此进行更新。MvcController 子生成器只是在 yo aspnet 中可用的众多子生成器中的一个。若要查看子生成器的完整列表,可以执行以下命令:

$ yo aspnet --help

yo aspnet 中的子生成器等效于你在 Visual Studio 中使用“文件”|“添加新项目”时的项目模板。若要添加视图,可使用 MvcView 子生成器。若要添加“管理员”视图,可从 Views 文件夹执行以下命令:

$ yo aspnet:MvcView Index

生成的视图 Index.cshtml 是非常基本的视图:

@*
  // For more information on
  // enabling MVC for empty projects,
  // visit bit.ly/1PBdyKc
*@
@{
  // ViewBag.Title = "Index Page";
}

同样地,使用 yo aspnet 生成的内容等效于 Visual Studio 中的“添加新项目”对话框。在 Index.cshtml 文件中,你可以添加标头,以便浏览到此页面并确认一切正常:

<h1>Admin Page</h1>

现在,让我们看一下生成并运行此应用程序所需执行的操作。

前面我们提到你可以使用“dnx . kestrel”命令运行应用程序。如果你使用的是 Code,那么你可以使用命令面板启动 Web 服务器,如图 6 所示。

在 Visual Studio Code 中启动 Web 服务器
图 6 在 Visual Studio Code 中启动 Web 服务器

当你使用 Code 时,只要源文件发生变化,你的项目便使用 OmniSharp 在后台生成。若要在 Code 中查看任何错误和警告(如图 7 所示),可使用状态栏中的“错误和警告”按钮。正如你所看到的,Code 在第 16 行指出了错误代码。

在 Visual Studio Code 中查看错误和警告
图 7 在 Visual Studio Code 中查看错误和警告

你还可以从命令行生成项目。假设新的 AdminController 类存在生成错误。若要在命令行上生成应用程序,可执行以下命令:

$ dnu build

这样向你显示的错误和警告应与 Code 所显示的相同。现在你已了解如何生成和运行应用程序,让我们继续简要地讨论一下调试和部署。

调试

当前,除了 Windows 和 Visual Studio 之外,其他任何平台均不支持 ASP.NET 5 调试,这意味着你无法调试在面向 OS X 或 Linux 的 Mono 上运行的 ASP.NET 5 应用程序。ASP.NET 5 应用程序使用 Roslyn 编译器而非 Mono 编译器进行编译,并且不发出任何调试信息。Visual Studio Code 尚不支持调试,但是你始终都可以在 Mac 或 Linux 计算机上的虚拟机中使用 Visual Studio。希望 Visual Studio Code 团队在 CoreCLR 发布后将能够支持调试。

部署

你已了解如何在本地开发应用程序;现在让我们简单地看一下托管选项。要对本主题进行详尽的研究需要使用它自己的文章,因此我们只是呈现一个简要概述,并为你指出一些外部资源。访问 bit.ly/1fvDQ41 获取最新信息。

下面简要地概括了 ASP.NET 5 的发布选项:

  • 使用“dnu publish”命令行实用工具的命令行发布
  • 使用 Git 发布到 Azure Web Apps
  • 发布到运行在 Azure 中的 Docker 容器

dnu 发布命令行是每个发布方法的中心。它采用可在 Web 服务器上运行的格式将你的应用程序打包。让我们进一步了解一下。

若要开始发布并查看可用的命令行选项,可执行以下命令:

dnu publish –help

图 8 显示了执行此命令的结果。

获取“dnu publish”命令帮助
图 8 获取“dnu publish”命令帮助

最重要的命令行选项是 --out (-o) 参数,它使你可以指定向其中发布文件的文件夹。但是,你还希望根据需要探索其他选项。

在你将应用程序发布到文件夹后,你只需要将该文件夹复制到 Web 服务器就可以了。如果你要发布到运行 IIS 的 Windows 计算机,你可以像往常一样配置网站。有关如何在 Linux 上配置 Web 服务器的信息,请参阅 bit.ly/1E8uebl

如果要发布到 Azure,你可以使用以下支持开始操作。Azure 支持 Azure Web Apps 以及 Docker 容器中的 ASP.NET 5 应用程序。若要从非 Windows 计算机部署到 Azure Web Apps,你可以使用 FTP 或 Git。对于 FTP 的情况,你可以发布 dnu 发布的结果。有关详细信息,请参阅 bit.ly/1LnFC2T

基于 Git 的发布模型易于使用,并且可以支持连续部署方案。若要开始使用 Git 发布到 Azure Web Apps,请参阅 bit.ly/1hQljS0。这些就是你要开始在所选平台上开发和运行 ASP.NET 5 应用程序所需要知道的全部内容。

总结

过去使用 ASP.NET 开发 Web 应用程序会要求你使用 Windows 和 Visual Studio。现在,你可以在任何平台上使用 ASP.NET 5 以及相关的命令行实用工具和其他工具。这只是一个开端。若要随时关注 ASP.NET 5 的最新消息,请访问 github.com/aspnet/Home。yo aspnet 项目完全由社区支持。如果你有兴趣帮忙,请在 bit.ly/1PvtcGX 打开某个问题。


Shayne Boyer是来自佛罗里达州奥兰多的一位 ASP.NET MVP,也是社区发言人和解决方案架构师。他在过去 20 年中一直在开发基于 Microsoft 的解决方案。在过去的 10 年中,他曾处理大型 Web 应用程序,重点关注效率和性能。你可以通过 Twitter @spboyer 和他的网站 tattoocoder.com 联系 Shayne。

Sayed Ibrahim Hashimi是 Microsoft Visual Studio Web 团队的高级项目经理。他撰写过多本关于 Microsoft 技术的书籍,并且他还是 SideWaffle 和 TemplateBuilder 的创建者,以及 OmniSharp 的联合创建者。你可以通过 Twitter @SayedIHashimi 和他的博客 sedodream.com 联系 Sayed。

衷心感谢以下 Microsoft 技术专家对本文的审阅: Scott Hanselman