Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any hot reload for blazor server-side?

I have just one, quick question. Is there way to hot reload a blazor app? At least, .razor files? Now I'm hosting my app on local IIS (not IIS express).

I was looking through internet, but i didn't found anything helpful.

Thank you all for anwsering :)

like image 334
cebilon123 Avatar asked Sep 30 '19 17:09

cebilon123


People also ask

Does Blazor have hot reload?

In Blazor apps, the framework triggers a Razor component render automatically. In MVC and Razor Pages apps, Hot Reload triggers a browser refresh automatically.

How do you force reload in Blazor?

A page is reloaded/refreshed automatically at a specified interval using “NavigationManager” in OnAfterRender() method. Here the NavigateTo(“url”, forceLoad: true) method, is used to force load the browser based on the URI.

Does Blazor have a future?

Blazor will not be the future of all web development due to the diverse nature of web development. C#, JavaScript, Python and many other languages are used for server side coding of websites. The nature of web assembly is to compile from a source language like C# to the target machine code of web assembly.

Is Blazor server production ready?

Yes, Blazor is ready to be used in production, it is a life changer, Blazor is a framework that optimizes development speed, helps considerably reducing code duplication and inconsistencies between front-end and api/backend models, and in turn it helps reducing bugs and development costs, in top of that, since Blazor ...


2 Answers

Maybe you can try running your application from command prompt:

dotnet watch run debug 
like image 137
Mauricio Atanache Avatar answered Sep 20 '22 12:09

Mauricio Atanache


Update 2021-11-10:

With Visual Studio 2022 being released 2021-11-08 hot reload now works out of the box. Upgrade your project to .NET 6 to get the best experience.

https://docs.microsoft.com/en-us/visualstudio/releases/2022/release-notes#NET-HotReload-170

Update 2021-04-09:

Initial .NET Hot Reload support for .NET 6 Preview 3

Add the "hotReloadProfile": "aspnetcore" property to your launch profile in launchSettings.json. For Blazor WebAssembly projects, use the "blazorwasm" hot reload profile.

Run the project using dotnet watch.

You can find a list of supported code edits in the docs.

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

Thanks @Quango for pointing it out.

Update 2020-04-09:

Instead of using browser-sync I have added the following code in _Host.cshtml under <script src="_framework/blazor.server.js"></script>

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

Not optimal but it works better since you need one less http server. Could also use _reconnectCallback if you still like to see the messages Attempting to reconnect to the server... and Could not reconnect to the server. Reload the page to restore functionality..

window.Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {     document.location.reload(); } 

https://thijstijsma.nl/2020/02/18/blazor-server-hot-reload/ https://stackoverflow.com/a/59807998/3850405

Original:

Hot reloading is planned for .NET 5, which is scheduled for Nov 2020 according to @danroth27 who is working on the Blazor project.

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

As @MauricioAtanache says you can use dotnet watch but don't forget to add which files to watch. Example:

dotnet watch --project BlazorTest.Server run 

BlazorTest.Server.csproj file:

<ItemGroup>     <Watch Include="..\**\*.razor" />     <Watch Include="..\**\*.scss" />     <Watch Include="..\**\*.cs" /> </ItemGroup> 

It is however not true hot reloading since it will restart the server but you have to do a manual refresh in the browser. You will also need to edit an existing file before a reload takes place if you add a new file.

To solve this I like to use browser-sync set up as a proxy to your web app.

Example:

browser-sync start --proxy https://localhost:5001/ --files '**/*.razor,**/*.cshtml, **/*.css, **/*.js, **/*.htm*' 

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

There is also a project on Github by @martasp called BlazorLiveReload that is supposed to handle Blazor Live Reload without refreshing page.

From author:

It uses razor engine version 3 to compile components to c# classes. Then using Roslyn compiler I compiled down those classes to assembly. Finally, I loaded the app.razor component from an assembly with reflection and with Steve Sanderson Test host modified library I turned component to plain HTML. To serve HTML files in realtime I used WebSockets to have a full-duplex communication.

I have not tested this project myself so I can't say how well it works.

https://github.com/martasp/BlazorLiveReload

General thread about the issue:

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

like image 20
Ogglas Avatar answered Sep 16 '22 12:09

Ogglas