近一两年用 Visual Studio Code 写代码的频率愈来愈高。工作项目仍以 Visual Studio 2019 为主,但写 PowerShell 我就会用 VSCode,至于在家写好玩的程序,像是玩 ESP/Arduino IoT、C/C++、Golang、Node.js、Vue.js + TypeScript SPA、OpenSCAD... 清一色都是开 VSCode。简单来说,VSCode 包办所有非 C# 语言的场合。之前的中秋黑客松- LINE Bot 开发,除了是我第一次写 LINE 机器人,也是第一次用 VSCode 写完整个 ASP.NET Core Razor Page 项目!
惯用 Visual Studio 的人换成 VSCode 通常需要一段适应期,二者操作概念差异颇大。Visual Studio 是个整合性跟完整度极高的开发环境,开发所需大小功能齐备,只需在大小工具视窗间穿梭点选按键敲 Code,谈笑间,樯橹灰飞烟灭,犹如连按摩浴缸都有的豪华游艇,搭乘起来的爽度不言而喻。至于 VSCode,本质是个开放构架,汇集各路英雄好汉开发的扩充套件,得自己堆叠扩充套件打造理想开发环境,但再怎么样,整体舒适度仍跟 Visual Studio 有大段差距,但 VSCode 轻巧、启动速度快有稍稍扳回一成。
近两个月用 VSCode 完成了几个 Coding4Fun ASP.NET Core Razor Page 小项目,小有心得,顺手整理一下。(注:本篇会以保哥的如何在 VSCode 设置完整的 .NET Core 建置、发现与部署工作为基础作补充,开发平台则锁定 .NET 6。)
1、VSCode 会自动下载更新,但开发 .NET 6 我遇到一个小陷井- VS2019 也要更新到新版,否则会出现 OmniSharp.MSBuild.ProjectLoader 目前的 .NET SDK 不支持以 .NET Core 6.0 作为目标。请以 .NET Core 5.0 或更低版本作为目标,或是使用支持 .NET Core 6.0 的 .NET SDK 版本。错误。新版 VSCode 自带新版 MSBuild,并有个 MSBuildLocator。机制寻找项目所需的 MSBuild,只是实测发现若有安装 VS2019,它总是优先用 VS2019 较旧版的 MSBuild,不怎么聪明。
2、VSCode 的扩充套件超多,多到让人眼花潦乱,若不知道写 .NET Core 该装哪些套件,推荐保哥整理的 .NET Core Extension Pack,几乎都是写 .NET Core 必备的好物。安装扩充套件除了透过 GUI 打关键字寻找安装,也可用一行指令搞定 code --install-extension doggy8088.netcore-extension-pack
3、在 VSCode 要建立 .NET Core 项目,不像 Visual Studio 有建立新项目菜单可以选模板,要自己下指令。我惯用的 SOP 是,在 Cmder 或 Windows Terminal mkdir 以项目名称为名建文件夹,cd 到文件夹后,下指令 dotnet new [template_type],接着输入 code . 用 VSCode 开启项目。
4、要查看有哪些模板,可以下指令 dotnet new -l
带入 Short Name 参数即可建立不同项目,例如:dotnet new console 是 Console Application、dotnet new razor 是支持 Razor Page + MVC 的 ASP.NET Core 项目、dotnet new webapi 是 WebAPI 项目。项目名称则由文件夹名称决定。
5、新增类别(.cs)、View(.cshtml)、Controller、Razor Page 时最怀念 Visual Studio 的方便。Visual Studio 有各式模版,已预先把 using、namespace、程序基本骨架做好,新增完马上进入重点写业务逻辑。VSCode 内置的 New File 所建立的是空白档案,连 using 跟 namespace 都没有,得从零开始。dotnet new 有提供一些模版,像是 dotnet new page 可建立 Razor Page,但功能很阳春,完整度差蛮多。
有个好用的 C# Extensions 试图缩小这段差距,它包含在 .NET Core 大补帖中,记得看一下介绍善用它的功能。
6、除了靠套件,现在也可用 dotnet new gitignore 建立 .gitignore。
7、跟 Visual Studio 一样,按 F5 可以调试,设断点、查看变数、在 DEBUG CONSOLE 即兴下指令;流程大致串通后,要细部微调,例如:改 css、HTML、JavaScript 及小调 C# 逻辑时,强烈推荐 .NET 6 的 Hot Reload 功能,修改后不用整个项目重新编译,快速置换修改部分后,浏览器还会自动显示修改结果,好用到升天。Scott Hanselman 有段示范短片值得一看,用过通常就回不去了。
当程序修改幅度过大,超出 Hot Reload 涵盖范围时,会出现 Unable to apply hot reload because of a rude edit. Rebuilding the app…信息,不过不用担心,VSCode 会重新编译重启程序,后续的小修改仍可继续 Hot Reload。參考