经过大量的折腾,我终于得到了这个工作,并想我会分享发生了什么。
当您运行ng build 时,它会编译并输出到ClientApp/dist 文件夹。当您启动调试会话时,您的项目将使用此版本。如果您在运行时更改文件,它将重新编译文件,但不会覆盖 dist 目录中的已编译文件。我认为因为文件是在 UI 之外手动生成的,VS 认为它不能覆盖它们。
因此,如果您幸运地开始遇到同样的问题,有一个简单的解决方法,只需在启动调试会话之前删除ClientApp/dist 文件夹。 Visual Studio 将在后台编译文件,当您更新源文件或样式表时,您的浏览器应该会自动刷新。
更新
我发现的另一件事是,如果您需要手动运行 ng build,还有另一种方法可以至少使文件保持最新(需要重新加载):
package.json
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"debug": "ng serve --watch",
},
然后运行ng build --watch 而不是ng build 这将使提示进入监视模式(按 ctrl c 结束),然后每次更改其中一个源文件时它都会更新。我添加了“调试”,因为我不确定它是否会影响生产,如果可以作为备份,保持现有或默认设置总是安全的。
然后在 Startup.cs (Configure(…)) 中更新服务器以使用新的“调试”:
spa.UseAngularCliServer(npmScript: "debug");
更新 - 2
我在使用 Angular 和 VS (2017) 时发现的另一件事是,如果您的代码中的某个地方碰巧出现了 cli 编译器没有发现的错误,尤其是在任何构造函数或 ngOnInit() 中功能,即使在关闭后它也会挂起 Angular 服务,使热更新看起来不再有效。这将导致完全疯狂,因为在服务关闭之前不会加载任何更改或更新。
另一个可能的原因是编译 .scss 或 Angular 时出错。检查“输出”窗口是否有任何 Angular-cli 错误或浏览器输出。
关闭 VS 后,确保在任务管理器中关闭 VSCompiler.exe、任何额外的 Console Windows Host(Angular 服务器,而不是在 SQL 用户下运行的服务器,即 MSSQLFDLauncher...)和任何 Visual Studio 服务。
我意识到这实际上是我的代码中的一个错误导致一切停止工作或根本不工作。 Angular 和 .NET 不会总是抛出错误,有时错误会被简单地跳过(尤其是当存在语法错误时)或在所有其他输出中间输出。
如果事情停止工作,很可能是由于错误或其他原因导致编译器停止响应。最后一个需要仔细检查的区域是您的 package.json 和 angular.json,尤其是任何路径,然后运行以下命令并密切关注输出以了解需要进行的更新:
ng update
npm update
npm rebuild
npm install
默认的 .json 文件应该可以从包中直接使用,尝试恢复到那些以检查您的配置。删除dist 文件夹基本上是上面的一个快捷方式(减去实际输出,让VS在Debug之前编译),强制角度重新编译所有内容,但请记住,如果服务被挂起,不管你做什么直到该服务停止为止。