# ASP.NET - 借助 OmniSharp 和 Yeoman 随时随地使用 ASP.NET 5
作者 [Sayed Ibrahim Hashimi](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Sayed+Ibrahim+Hashimi)、[Shayne Boyer](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Shayne+Boyer) | 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](http://bit.ly/1Ljhj68) 上找到分步说明。在本文中,我们假设你们中的大多数都使用的是 OS X。
第一步是安装我们将用于生成 ASP.NET 5 Web 应用程序的工具。最终,CoreCLR ([github.com/dotnet/coreclr](http://github.com/dotnet/coreclr)) 将会作为框架的基本运行时。但是就目前而言,ASP.NET 5 仍需要 Mono 运行时。若要安装 Mono,使用 HomeBrew ([brew.sh](http://brew.sh/)):
~~~
$ brew install mono
~~~
接下来,安装 .NET Version Manager (DNVM)(这是一组命令行实用工具),使你能够更新和配置 .NET 执行环境 (DNX),该环境主要支持使用 .NET Core 5 ([docs.asp.net/en/latest/dnx/](http://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”来加载它。
![](https://box.kancloud.cn/2016-01-08_568f4ae58f11a.png)
图 1 检查 DNVM 版本
## 选择编辑器
如果你使用的是 Windows,则无须赘述,你将使用 Visual Studio 的一些版本。但是在 OS X 或 Linux 上,你会有多种选择,从 TextMate 等简单的文本编辑器,到 Sublime、Atom、Emacs 或 Vim 等各种受欢迎的编辑器。但跨平台开发编辑器的列表中新添了一项 – 来自 Microsoft 的 Visual Studio Code ([code.visualstudio.com](http://code.visualstudio.com/)) – 这是我们选择的编辑器,它不仅面向 ASP.NET 5,还面向 AngularJS、Node.js 和一般的 JavaScript 开发(见图 2)。
![](https://box.kancloud.cn/2016-01-08_568f4ae5b203a.png)
图 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](http://yeoman.io/)) 和 ASP.NET 生成器项目 ([bit.ly/1MPe5KY](http://bit.ly/1MPe5KY))。Yeoman 是在 Node.js 之上生成的基架平台,使你能够为项目或代码文件生成基于模板的生成器。它是一个命令行实用工具,并且由于它在 Node.js 上生成,因此你首先需要注意一些依赖项。
首先,通过 HomeBrew 或直接从 [nodejs.org](http://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。
![](https://box.kancloud.cn/2016-01-08_568f4ae5d20f0.png)
图 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](http://bit.ly/1LwonPN)。)
在 Visual Studio Code 中打开源文件夹后,便可以开始开发应用程序了。图 4 显示了当你在 Code 中打开项目时的结果。
![](https://box.kancloud.cn/2016-01-08_568f4ae5f1f7b.png)
图 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 所示。
![](https://box.kancloud.cn/2016-01-08_568f4ae61da05.png)
图 6 在 Visual Studio Code 中启动 Web 服务器
当你使用 Code 时,只要源文件发生变化,你的项目便使用 OmniSharp 在后台生成。若要在 Code 中查看任何错误和警告(如图 7 所示),可使用状态栏中的“错误和警告”按钮。正如你所看到的,Code 在第 16 行指出了错误代码。
![](https://box.kancloud.cn/2016-01-08_568f4ae641306.png)
图 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](http://bit.ly/1fvDQ41)获取最新信息。
下面简要地概括了 ASP.NET 5 的发布选项:
* 使用“dnu publish”命令行实用工具的命令行发布
* 使用 Git 发布到 Azure Web Apps
* 发布到运行在 Azure 中的 Docker 容器
dnu 发布命令行是每个发布方法的中心。它采用可在 Web 服务器上运行的格式将你的应用程序打包。让我们进一步了解一下。
若要开始发布并查看可用的命令行选项,可执行以下命令:
~~~
dnu publish –help
~~~
图 8 显示了执行此命令的结果。
![](https://box.kancloud.cn/2016-01-08_568f4ae660161.png)
图 8 获取“dnu publish”命令帮助
最重要的命令行选项是 --out (-o) 参数,它使你可以指定向其中发布文件的文件夹。但是,你还希望根据需要探索其他选项。
在你将应用程序发布到文件夹后,你只需要将该文件夹复制到 Web 服务器就可以了。如果你要发布到运行 IIS 的 Windows 计算机,你可以像往常一样配置网站。有关如何在 Linux 上配置 Web 服务器的信息,请参阅 [bit.ly/1E8uebl](http://bit.ly/1E8uebl)。
如果要发布到 Azure,你可以使用以下支持开始操作。Azure 支持 Azure Web Apps 以及 Docker 容器中的 ASP.NET 5 应用程序。若要从非 Windows 计算机部署到 Azure Web Apps,你可以使用 FTP 或 Git。对于 FTP 的情况,你可以发布 dnu 发布的结果。有关详细信息,请参阅 [bit.ly/1LnFC2T](http://bit.ly/1LnFC2T)。
基于 Git 的发布模型易于使用,并且可以支持连续部署方案。若要开始使用 Git 发布到 Azure Web Apps,请参阅 [bit.ly/1hQljS0](http://bit.ly/1hQljS0)。这些就是你要开始在所选平台上开发和运行 ASP.NET 5 应用程序所需要知道的全部内容。
## 总结
过去使用 ASP.NET 开发 Web 应用程序会要求你使用 Windows 和 Visual Studio。现在,你可以在任何平台上使用 ASP.NET 5 以及相关的命令行实用工具和其他工具。这只是一个开端。若要随时关注 ASP.NET 5 的最新消息,请访问 [github.com/aspnet/Home](http://github.com/aspnet/Home)。yo aspnet 项目完全由社区支持。如果你有兴趣帮忙,请在 [bit.ly/1PvtcGX](http://bit.ly/1PvtcGX) 打开某个问题。
* * *
Shayne Boyer *是来自佛罗里达州奥兰多的一位 ASP.NET MVP,也是社区发言人和解决方案架构师。他在过去 20 年中一直在开发基于 Microsoft 的解决方案。在过去的 10 年中,他曾处理大型 Web 应用程序,重点关注效率和性能。你可以通过 Twitter [@spboyer](http://twitter.com/@spboyer) 和他的网站 [tattoocoder.com](http://tattoocoder.com/) 联系 Shayne。*
Sayed Ibrahim Hashimi *是 Microsoft Visual Studio Web 团队的高级项目经理。他撰写过多本关于 Microsoft 技术的书籍,并且他还是 SideWaffle 和 TemplateBuilder 的创建者,以及 OmniSharp 的联合创建者。你可以通过 Twitter [@SayedIHashimi](http://twitter.com/@SayedIHashimi) 和他的博客 [sedodream.com](http://sedodream.com/) 联系 Sayed。*
- 介绍
- Microsoft Azure - Microsoft Azure - 大图
- 崛起 - 新手成功的秘诀
- ASP.NET - 借助 OmniSharp 和 Yeoman 随时随地使用 ASP.NET 5
- 使用 C++ 进行 Windows 开发 - Visual C++ 2015 中的协同例程
- Visual Studio - Bower: 用于 Web 开发的新型工具
- 测试运行 - 使用 C# 实现线性判别分析
- 代码分析 - 借助与 NuGet 集成的 Roslyn 代码分析来生成和部署库
- 孜孜不倦的程序员 - 如何成为 MEAN: 快速安装
- Microsoft Band - 借助 Microsoft Band SDK 开发 Windows 10 应用程序
- C# - C# 中的一种分裂与合并表达式分析器
- 别让我打开话匣子 - 过时的东西
- 编者寄语 - 灾难链