为什么在.cshtml文件更改后刷新页面不会更新

84

我正在尝试使用 Blazor,但是在刷新浏览器页面后更改 component 后,为什么它不会更新?难道 client 不应该像 angular 那样自我更新吗?

只有当我重新启动 blazor 服务器时,它才会刷新。

Index.cshtml

@page "/"

<h1>Hello, world!</h1>

如果我改变比如说 <h1> 标签中的文本为 Hello people,我保存项目并刷新页面(正如我在 Blazor 教程中被建议的那样),难道不应该能看到 Hello people 了吗?

6个回答

163
在Asp.net Core 3.0之后,可以使用Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包启用运行时编译。要启用运行时编译,应用程序必须:
安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包。
更新项目的Startup.ConfigureServices方法,包括调用AddRazorRuntimeCompilation。
services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();
或者
services.AddMvc().AddRazorRuntimeCompilation();  

1
这适用于 Web 应用程序(不在调试模式下)。它不适用于引用的 Razor 库中更改的文件。 - Cesar
12
您也可以将 .AddRazorRuntimeCompilation(); 添加到 services.AddRazorPages() 而不是 services.AddControllersWithViews()services.AddMvc() - jhhwilliams
3
在开启/关闭此功能后会影响性能吗?将其在生产环境中关闭但在开发环境中启用,这是否会有任何区别? - grimdog_john
3
剃刀式运行时编译是MVC的功能,不是支持的Blazor功能。https://github.com/dotnet/aspnetcore/issues/16915 - Flores
1
AddRazorRuntimeCompilation 不兼容 net core 3.1。 - djack109
显示剩余5条评论

26

我猜你正在使用调试器运行应用程序?这会阻止重新编译。你需要:

按Ctrl-F5以不带调试器的方式运行应用程序。目前不支持在调试器下运行(F5)。

https://github.com/dotnet/aspnetcore/issues/5456


是的,我确实使用调试器运行它。 - Bercovici Adrian
稍等一下,@Flores,你的意思是我可以通过按Ctrl-F5来运行应用程序,更新我的代码(当然不关闭我的应用程序),保存更改,然后刷新页面,我们的Blazor应用程序就会显示更改。不可能吧。这对我来说是新鲜事物,保存项目,重新编译它(我并不是在讽刺。我是真心的)。 - enet
1
如果我在上面的评论中没有错的话,@Bercovici Adrian,那么你可以在每次更新后按Ctrl-F5(这将重新编译并运行您的应用程序),或者您可以构建或重建您的应用程序,然后按F5。 - enet
无论调试器是否正在运行,Eureka的答案都是正确的。 - Pawel
在VS2019中,这仍然无法正常工作。在MVC中,这很好地运行了,所以我们在开发者体验方面是否需要退一步呢? - user183872
https://code2night.com/Blog/MyBlog/Stopping-Browser-Reload-On-saving-file-in-Visual-Studio-AspNet - Shubham

10

您需要在 Razor 页面中添加或启用运行时编译功能。

安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 的版本号为 3.1.6 的包。

安装完成后,将启动文件设置为:

 services.AddMvc().AddRazorRuntimeCompilation();

1
智能感知没有建议安装哪个包,我点赞。 - Duck Ling

4

按照以下步骤操作:

  1. 从NuGet安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。

  2. 更新Startup类中的ConfigureServices方法如下所示:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

  1. 完成。

2
如果您进入“工具”>“选项”>“键盘”,并在“显示包含命令”的搜索框中搜索“BrowserLink”,找到“OtherContextMenus.BrowserLink.RefreshLinkedBrowsers”选项,默认情况下设置为CTRL+Alt+Enter。点击“删除”,然后选择“按快捷键”输入,并按Ctrl+S。接下来(在输入框左侧),将“在全局使用新快捷键”更改为“文本编辑器”。点击“确定”直到窗口关闭。现在,Visual Studio使用CTRL+S同时进行文件保存和刷新链接的浏览器。(仅当文本编辑器.cshtml、.css、.js等文件在编辑窗口中处于活动状态时才有效)警告:如果您没有将其设置为全局之外的其他内容,则它将覆盖保存的快捷方式,您将无法保存文件。
最初的回答: 进入“工具”>“选项”>“键盘”,搜索“BrowserLink”,删除“OtherContextMenus.BrowserLink.RefreshLinkedBrowsers”的默认快捷键CTRL+Alt+Enter, 改成按Ctrl+S。在“使用新快捷键的位置”中选择“文本编辑器”,然后点击“确定”即可。注意不要把快捷键设置成全局,否则将覆盖保存文件的快捷键。只有在正在编辑.cshtml、.css、.js等文件时才能同时保存文件和刷新链接的浏览器。

1

添加 "services.AddMvc().AddRazorRuntimeCompilation();" 并安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包 6.0.5 将解决问题,但会破坏 "css 隔离"。你会注意到的第一件事是页脚将失去其位置。


有任何适当的解决方案吗? - Dror Bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接