我尝试像使用 Angular 和 Node 或 NPM 一样自动重新加载 ASP.NET Core 项目。
当我更改 .NET Core 项目的代码并保存时,我希望网页在 Web 浏览器中自动刷新。
在项目控制台中运行此命令
dotnet watch run
同样适用于Visual Studio 代码
来自使用文件观察器开发 ASP.NET Core 应用程序(适用于 3.0)
dotnet watch 是一个在源文件更改时运行 .NET Core CLI 命令的工具。例如,文件更改可以触发编译、测试执行或部署。
上面的链接包含一个包含两个示例项目的教程:
或者,您也可以使用此 nuget 包进行运行时编译。
我认为 dotnet watch 应该可以工作。请参阅链接中的文档,因为有多种选项。
- 将 Microsoft.DotNet.Watcher.Tools 添加到 project.json 文件的工具部分
- 运行 dotnet restore
- 使用 dotnet watch run 执行
您可以使用dotnet watch
. 即。文档
我创建了自定义午餐配置文件,以使其更容易在 VS 中运行。
"Watch": {
"executablePath": "dotnet.exe",
"workingDirectory": "$(ProjectDir)",
"commandLineArgs": "watch run",
"launchBrowser": false,
"launchUrl": "http://localhost:5000/",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
根据这个需求,我们需要像Angular应用一样运行.net core应用,自动加载页面和内容,无需构建和手动刷新。
我做了一些研究并体验到自动重新加载在 ASP.NET 核心项目中是不可能的。但是,我们取得了成功,在我们的解决方案中,我们使用 dotnet watch 来监视源文件,如果文件发生更改,则关闭它启动的应用程序,重建并发布项目,然后重新启动应用程序,然后我们只需要在浏览器中手动刷新页面以获取在应用程序中所做的更改,我们不需要构建或启动项目。
使用 asp.net watch 的步骤:
1)创建.Net核心应用。
2) 在您的 Web 项目文件夹中打开一个命令窗口
3) 类型dotnet watch run
4) 打开浏览器并导航到 API 或页面
5)对源代码进行更改
6) 保存文件
7)返回浏览器并手动刷新
8)你应该看到反映的变化
使用 dotnet watch 重新编译源代码。使用 Visual Studio 中的“浏览器在保存时重新加载”的浏览器链接来重新加载所有浏览器。https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BrowserReloadonSave
在 VS Code 环境中为 ASP.NET Core 项目(web、mvc 等)自动创建的任务之一称为“监视”。要检查这一点,请从“.vscode”文件夹中打开文件 tasks.json,您将看到 3 个任务配置:“build”、“publish”和“watch”。默认情况下,launch.json 中使用“build”。然后,您可以进入 launch.json 的“configurations”部分并查找“preLaunchTask”,然后您可以将任务更改为“watch”。就是这样。运行 Web 应用程序时,热重载将处于活动状态。问候。
在继续使用此选项之前,您应该三思而后行。(1) 消耗资源。因为它需要自动构建,作为预操作,修改后的项目,有时甚至是整个解决方案。(想象一个由许多项目组成的中型到巨大的 Asp.net 解决方案,为执行的每个修改构建!!还有多少时间用于编程???!!)(2)如您所知,页面重新加载会消耗很多成功构建后首次启动的时间!!...因此,您希望从该选项中获得的时间将被浪费多次,尤其是基于 CLR 的编程语言(例如 .NET Core)。最后,(3)您的项目预计需要开发可以在视图中自动注入的测试样本以获得更好的自动化过程,想象一下这有多困难!
相反,尝试对您的解决方案进行单元测试,然后,任何下一次修改都应该是肤浅的和很少发生的。
如果你不同意我的建议,我建议开发一个视觉工作室扩展,它可以更好地重新加载目标网页on-build
而不是on-save-changes
事件。接下来,Ctrl + b
会做的工作!
从哪儿开始?
我开发了一个 VSIX,它监视文件夹以在 VS UI 之外自动加载特定生成的文件。检查源代码,您将对项目的文件管理有所了解。它以 EnvDTE API 为中心,请查看这段代码。
另外,从这里检查源项目