blazor 服务器端是否有任何热重载?

ceb*_*123 38 c# blazor blazor-server-side blazor-client-side blazor-webassembly

我只有一个快速的问题。有没有办法热重载 blazor 应用程序?至少,.razor 文件?现在我将我的应用程序托管在本地 IIS(不是 IIS express)上。

我正在浏览互联网,但没有发现任何有用的东西。

谢谢大家的回答:)

Mau*_*che 55

也许您可以尝试从命令提示符运行您的应用程序:

dotnet watch run debug
Run Code Online (Sandbox Code Playgroud)

  • 是的,这效果很好。每当有更改时,它都会自动重新加载页面 - 不是完全无缝,但几乎是这样。 (2认同)

Ogg*_*las 21

2021-04-09 更新:

初始 .NET 热重载支持 .NET 6 Preview 3

将 "hotReloadProfile": "aspnetcore" 属性添加到 launchSettings.json 中的启动配置文件。对于 Blazor WebAssembly 项目,请使用“blazorwasm”热重载配置文件。

使用dotnet watch.

您可以在docs 中找到支持的代码编辑列表。

https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-3/#initial-net-hot-reload-support

感谢@Quango 指出。

2020-04-09 更新:

而不是使用browser-sync我加入以下代码_Host.cshtml<script src="_framework/blazor.server.js"></script>

<environment include="Development">
    <script>
        window.Blazor.defaultReconnectionHandler.onConnectionDown = function () {
            setTimeout(function () {
                location.reload();
            }, 7000);
        }
    </script>
</environment>
Run Code Online (Sandbox Code Playgroud)

不是最佳的,但效果更好,因为您需要少一台 http 服务器。也可以使用_reconnectCallback,如果你还是喜欢看到的消息Attempting to reconnect to the server...Could not reconnect to the server. Reload the page to restore functionality.

window.Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
    document.location.reload();
}
Run Code Online (Sandbox Code Playgroud)

https://thijstijsma.nl/2020/02/18/blazor-server-hot-reload/ /sf/answers/4186559891/

原来的:

据负责 Blazor 项目的 @danroth27 称,计划在 2020 年 11 月对 .NET 5 进行热重载。

https://github.com/dotnet/aspnetcore/issues/5456#issuecomment-584219488

正如@MauricioAtanache 所说,您可以使用 dotnet watch,但不要忘记添加要观看的文件。例子:

dotnet watch --project BlazorTest.Server run
Run Code Online (Sandbox Code Playgroud)

BlazorTest.Server.csproj 文件:

<ItemGroup>
    <Watch Include="..\**\*.razor" />
    <Watch Include="..\**\*.scss" />
    <Watch Include="..\**\*.cs" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

然而,这不是真正的热重载,因为它会重新启动服务器,但您必须在浏览器中手动刷新。如果添加新文件,您还需要在重新加载之前编辑现有文件。

为了解决这个问题,我喜欢使用browser-sync设置作为您的网络应用程序的代理。

例子:

browser-sync start --proxy https://localhost:5001/ --files '**/*.razor,**/*.cshtml, **/*.css, **/*.js, **/*.htm*'
Run Code Online (Sandbox Code Playgroud)

https://weblog.west-wind.com/posts/2019/May/18/Live-Reloading-Server-Side-ASPNET-Core-Apps

在 Github 上还有一个由 @martasp 开发的项目,该项目被称为BlazorLiveReload应该在不刷新页面的情况下处理 Blazor Live Reload。

来自作者:

它使用 razor 引擎版本 3 将组件编译为 c# 类。然后使用 Roslyn 编译器将这些类编译成汇编。最后,我使用反射从程序集中加载 app.razor 组件,并使用 Steve Sanderson 测试主机修改库将组件转换为纯 HTML。为了实时提供 HTML 文件,我使用 WebSockets 进行全双工通信。

我自己还没有测试过这个项目,所以我不能说它的效果如何。

https://github.com/martasp/BlazorLiveReload

关于这个问题的一般线程:

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

  • 热重载对我来说不适用于这些方法。不过,进行一些调整即可使其发挥作用。从 Powershell 运行 2 个窗口:1. `dotnet watch run`,2. `browser-sync start --proxy https://localhost:5001/ --files 'bin/Debug/netstandard2.1/BlazorApp.dll'`。如果没有这个,浏览器同步会过早触发并错过更改 (2认同)

Nie*_*ree 7

Thijs Tijsma 有一篇对我有用的帖子

您必须在没有附加调试器的情况下运行Visual Studio(在 Visual Studio 中为CTRL+ F5

Pages\_host.cshtml添加

<script src="_framework/blazor.server.js"></script>

<!-- Make sure you place it after the include for blazor.server.js -->

<environment include="Development">
    <script src="~/Scripts/HotReload.js"></script>
</environment>
Run Code Online (Sandbox Code Playgroud)

然后只需制作重新加载js文件 wwwroot\scripts\HotReload.js

window.Blazor.defaultReconnectionHandler.onConnectionDown = function ()
{
    window.location.reload();
};
Run Code Online (Sandbox Code Playgroud)


Ali*_*ati 5

CTRL只需使用+启动项目F5(无需附加调试器),进行更改并重新加载页面。