ASP.NET Core知多少(6):VS Code联调Angular + .NetCore
1. 引言
最近在看《程序员的成长课》,讲到程序员如何构建技能树,印象深刻。作为一名后台开发的程序员,深感技能单一,就别说技能树了。作为一名合格的后台程序员,至少要掌握一门静态语言,一门动态语言和一门前端语言。静态语言C#算不上精通,动态语言Python也刚刚入门。但前端却是空白,虽说有了解过jquery、bootstrap,但因为项目无所涉及,早已忘得一干二净。
近几年,前端框架大行其道,Web开发已经是一个不容忽视的大趋势,在这个趋势下对前端框架一无所知,显然是要淘汰的。所以决定拾起前端,选择学习Angular来弥补自己的前端空白。计划使用.Net Core + Angular开发一个任务清单。
2. 环境准备
.Net Core已经支持Angular模板,我们只需要使用dotnet new angular -n YourAppName即可创建angualr项目模板。
依次安装:
- Node.js(默认安装,即可安装NPM)
- 执行
npm install -g @angular/cli,安装angular cli。 - 开发工具:Visual Studio Code
- 安装最新.Net Core SDK,目前版本V2.1.101。
3. 创建并启动项目
执行dotnet new angular -n Learning.NetCore.Angular,创建项目后,使用VS Code打开文件夹。项目结构如下图所示。其中ClientApp就是Angular所写的前端部分,实现了前后端分离。

打开后我们需要安装以下几个VS Code的扩展,以便我们顺利开发调试。

稍后,右下角会弹窗提示我们是否需要调试项目,如下图所示。

点击Yes,就会在项目中为我们创建一个.vscode的文件夹。其中包含两个文件,一个是launch.json,一个是tasks.json。其中launch.json用于配置调试相关参数。tasks.json用于配置默认的构建任务。
如果没有弹出上图弹窗,我们也可以按下图步骤添加。

第一次运行时,我们先执行dotnet build来验证项目能否正确构建, 它会恢复npm依赖,可能会耗时几分钟,npm依赖安装完毕后,以后再次运行就很快了。等构建成功,执行dotnet run运行项目。

浏览器访问http://localhost:5000即可看到下图效果。

然后键盘按Ctrl+C停止运行。
4. 项目调试
因为第三步我们已经创建了默认调试配置。直接F5运行,就可以调试.Net Core代码。但是我们该如何联调Angular代码呢?这就是本节的重点了。我们需要修改下我们的launch.json了。
打开launch.json点击添加配置,然后选择Chrome:Launch,就会添加在配置文件中添加一个节点,如下所示:
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
},
我们需要做相应修改。因为.Net Core项目默认绑定端口为5000,所以我们要将上面url的端口号改为5000。并映射webRoot到wwwroot目录下。同时我们要启用sourceMaps。修改后如下所示:
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:5000",
"webRoot": "${workspaceFolder}/wwwroot",
"sourceMaps": true
},
至此我们成功添加一个任务用来启动Chrome,来调试我们的angular。需要简单三步走:
- 终端执行
dotnet run,运行项目 - 切换到debug按钮,选择Launch Chrome配置,F5运行。
- 断点ts文件。
步骤如下图所示:

但是这个时候我们仍然无法做到联调。我们需要要先启动项目,再选具体的某个调试配置进行调试。即同时只能调试Angualr和.NetCore中的一个。那如何二者联调???
5. 联调Angualr&&.NetCore
同样我们还是要修改launch.json,添加一个compounds配置节点。这个节点允许我们同时启动多个调试任务。配置如下:
"compounds": [
{
"name": ".Net Core + Chrome",
"configurations": [".NET Core Launch (web)","Launch Chrome"]
}
],
"configurations": [
//省略
]
最终的配置如下:
"compounds": [
{
"name": ".NetCore+Chrome",
"configurations": [ ".NET Core Launch (web)", "Launch Chrome" ]
}
],
"configurations": [
{
// chrome debugger
},
{
// .Net Core Launch (web)
},
]
这个配置很简单,就是把我们刚才配置的调试任务组装在一块即可。
回到调试界面,选择.NetCore+Chrome,F5运行,就可以同时在angular和.net core代码中断点并调试。如下图所示:

细心的你可能会发现,通过这种方式虽然可以完成联调,但还是有点小瑕疵。两个调试任务会分别启动一个网页窗口。那有没有办法解决呢?有的,我们再添加一个.Net Core Launch (console)的调试任务,这个调试任务就不会启动网页窗口。然后再将.Net Core Launch (console)和Launch Chrome组装在一起即可。具体配置看下图:

6. 最后
本文仅是VS Code开发调试技巧的讲解,希望对你有所帮助。
ASP.NET Core知多少(6):VS Code联调Angular + .NetCore的更多相关文章
- ASP.NET Core知多少(7):对重复编译说NO -- dotnet watch
ASP.NET Core知多少系列:总体介绍及目录 1. 引言 我们一般的开发过程,就是编码-->编译-->运行-->调试-->定位问题--->修改代码-->编译- ...
- ASP.NET Core知多少(13):路由重写及重定向
背景 在做微信公众号的改版工作,之前的业务逻辑全塞在一个控制器中,现需要将其按厂家拆分,但要求入口不变. 拆分很简单,定义控制器基类,添加公用虚方法并实现,各个厂家按需重载. 但如何根据统一的入口参数 ...
- VS Code 开发asp.net core 遇到的坑
摘要 微软发布.NET Core 1.0,ASP.NET Core 1.0 与 Entity Framewok 1.0也有一段时间了,一直没进行这方面的学习,节前公司让调研这方面的可行性.所以还是从最 ...
- VS Code开发调试ASP.NET Core 1.0
VS Code开发调试ASP.NET Core 1.0 使用VS Code开发调试ASP.NET Core 1.0,微软在今天凌晨发布了.NET Core 1.0,ASP.NET Core 1.0 与 ...
- ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...
- 003.ASP.NET Core tutorials--【Asp.net core 教程】
ASP.NET Core tutorials Asp.net core 教程 2016-10-14 1 分钟阅读时长 本文内容 1.Building web applications 构建web应用 ...
- 一张图理清ASP.NET Core启动流程
1. 引言 对于ASP.NET Core应用程序来说,我们要记住非常重要的一点是:其本质上是一个独立的控制台应用,它并不是必需在IIS内部托管且并不需要IIS来启动运行(而这正是ASP.NET Cor ...
- asp.net core 开发的https证书服务-agilelabs.net
创建证书-生成CSR(Certificate Sign Request): 填写证书基本信息 接下来我们就可以看到创建的证书签名请求信息(CSR): 为我们刚才创建的CSR签名: 签名的意思是说通过证 ...
- ASP.NET Core 中断请求了解一下(翻译)
ASP.NET Core知多少系列:总体介绍及目录 本文所讲方式仅适用于托管在Kestrel Server中的应用.如果托管在IIS和IIS Express上时,ASP.NET Core Module ...
随机推荐
- Jquery验证码倒计时
html代码: <input type="button" value="获取验证码" id="getCode" style=" ...
- vue中npm run dev运行项目自动打开浏览器
npm run dev运行项目自动打开浏览器设置自动打开浏览器 // 各种设备设置信息 host: 'localhost', //主机名 port: 8080, // 端口号(默认 ...
- 【原创精品】mac 彻底卸载趋势科技
在公司,给我的mac 笔电装了公司的查杀毒软件,此后,这货就像挥之不去的病毒,就像你心理上阴影一样如影随形,最邻人方案的是这货没界面,只是个后台服务,一般人就没办法了.最最令人反感的是它经常控制/拖慢 ...
- Python3学习十四
1. JS基本概念 网景和sun联合开发javascript javascript 三个部分:ECMAScript 语法 DOM(document object model) BOM(b ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- F7里利用DIV 模拟 textarea 显示回行的问题解决
<div class="card-content-inner" style="word-wrap:break-word;word-break:break-all;w ...
- mysql使用错误
mysql运行报The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time z ...
- C语言 第三次作业--函数
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 学习C语言也半个学期了,前天也才刚刚进行了半期考试,emmm,成绩很差,可以反应出来我这半学期学习的效果并不 ...
- symfony简单的博客练习,熟悉具体开发流程
这里搭建一个简单的博客系统作为练习,之后再完成学校任务搭建一个表白墙, 使用htmlpurifier和parsedown来搭建前端,所以需要先安装这两个第三方包,必须要弄一个composer的国内镜像 ...
- 音频相关基本概念,音频处理及编解码基本框架和原理以及音、重采样、3A等音频处理(了解概念为主)
视频笔记:音频专业级分析软件(Cooledit) 音质定义以语音带宽来区分,采样率越高,带宽越大,则保真度越高,音质越好.窄带(8khz采样),宽带(16khz采样),CD音质(44.1khz采样) ...