# 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”來加載它。

圖 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)。

圖 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。

圖 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 中打開項目時的結果。
?
圖 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?所示。

圖 6 在 Visual Studio Code 中啟動 Web 服務器
當你使用 Code 時,只要源文件發生變化,你的項目便使用 OmniSharp 在后臺生成。若要在 Code 中查看任何錯誤和警告(如圖 7?所示),可使用狀態欄中的“錯誤和警告”按鈕。正如你所看到的,Code 在第 16 行指出了錯誤代碼。

圖 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?顯示了執行此命令的結果。

圖 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# 中的一種分裂與合并表達式分析器
- 別讓我打開話匣子 - 過時的東西
- 編者寄語 - 災難鏈