图 3 .NET Core 项目中的 IntelliSense
默认情况下,并不会启用编辑器的所有功能。可从 Mac 应用程序菜单中,打开“首选项”对话框,调整 Visual Studio for Mac 设置。这相当于 Visual Studio“工具”菜单中的“选项”对话框,其中包含很多选项,供你按需自定义 IDE。
对单元测试使用 NUnit 进行支持,其他测试运行程序可通过扩展插入。程序集中发现的测试会显示在“单元测试”面板中,该面板可从“查看 | 面板”菜单进行访问。在源代码编辑器中也集成了 Git 版本控制,在编辑器底部显示有一行选项卡,可以访问当前文件的日志、差异和责任视图。
如果希望利用更多的提示和技巧快速进入状态,建议从 Xamarin Evolve 2016 观看我的“Become a Xamarin Studio Expert(成为 Xamarin Studio 专家)”讲座 (xmn.io/xs-expert),因为这个讲座内容正好适用于 Visual Studio for Mac。
开源的内核与 Xamarin Studio 一样,Visual Studio for Mac 是基于开源的 MonoDevelop IDE(这也是 Microsoft 积极开发的开源项目)。它完全采用 C# 编写,具有强大的可扩展性模型,从简单的编辑器命令到全新的语言和项目类型,都可以通过扩展来添加功能性。即使已有核心功能,例如 C# 编辑,对 Xamarin.iOS、Xamarin.Android 和 ASP.NET Core 的支持也都是通过扩展实现。
与 Visual Studio 和 Visual Studio Code 一样,Visual Studio for Mac 中对 C# 的支持也是基于开源 Roslyn 编译器平台实现的。你可拥有与使用 Visual Studio 时完全相同且熟悉的 IntelliSense 体验,并且支持编辑器中实时分析器和代码修复。Visual Studio for Mac 甚至还默认包括分析器和代码修复的 Refactoring Essentials 集合。
借助 TextMate 捆绑包提供语法突出显示和简单的 IntelliSense,Visual Studio for Mac 可支持编辑各种语言。它包括了来自 Visual Studio Code 的大量开源 TextMate 捆绑包。
创建 ASP.NET Core 应用为了展示使用 Visuao Studio for Mac 加速开发是多么容易,接下来我会创建一个简单的 ASP.NET Core 后端进行演示。它用于一个假想的“共享待办事项列表”移动应用,允许多个用户添加事项,只要其中任何一个用户发布事项,所有用户都可以看到。
请注意,我在撰写本文时使用的是 Visual Studio for Mac 预发布版,UI 的一些细节在发布版中可能会有所变动。但是,本文介绍的方法和概念仍是适用的。
安装并打开 Visual Studio for Mac 后,首先在欢迎页面上单击“新建解决方案”按钮,这会打开“新建项目”对话框。
之后,导航到“云”部分,选择“ASP.NET Core Web 应用程序”模板,单击“下一步”,然后选择“Web API”模板。“Web API”模板会创建一个 RESTful Web 服务,这是适用于移动后端的首选接口方式,不过你也可以稍后向项目中添加视图以创建 Web 前端。
最后,我将项目命名为 HelloVSMac,并单击“创建”。Visual Studio for Mac 使用 .net 模板引擎创建项目,打开项目,并开始还原项目所依赖的 NuGet 程序包。
如果使用解决方案面板中项目上的“工具 | 编辑文件”上下文菜单在编辑器中打开项目文件,则会看到它是一个便于理解的基于 MSBuild 的简单项目文件。如果直接对其编辑并保存,则 IDE 将自动重新加载经过修改的版本。
接下来在解决方案面板中看一下项目,关键项包括:
程序包: 项目的 NuGet 程序包依赖项。生成项目的 ASP.NET Core、.NET Core 框架和 MSBuild 目标都通过 NuGet 程序包进行安装。
Program.cs: Web 应用的入口点。ASP.NET Core 应用是程序,因此,有一个主要方法入口点,用于在应用核心创建、生成和运行 WebHost。
Startup.cs: 用于定义传递至 WebHost 的 Startup 类。该类包含应用程序的初始化方法。
appsettings.json: 应用的配置设置。这是 ASP.NET web.config 的 ASP.NET Core 等效项。
出于演示目的,所有这些将不做改动,下面看一下 Views 文件夹中的 ValuesController.cs 文件。该文件包含在 [Route("api/[controller]")] 路由上注册的 ValuesController 类。[controller] 是类名称的占位符,因此实际上是 api/values 路由。
我先定义一个非常简单的 ToDoItem 类和一个 ToDoList 存储类。ToDoList 是静态的,因此可以在请求之间共享。