多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 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。*