C# blazor服务器端是否有热重新加载?
我只有一个简单的问题。 有没有办法热加载blazor应用程序?至少,.razor文件? 现在我在本地IIS(不是IIS express)上托管我的应用程序 我在网上浏览,但没发现任何有用的东西C# blazor服务器端是否有热重新加载?,c#,blazor,blazor-server-side,blazor-client-side,blazor-webassembly,C#,Blazor,Blazor Server Side,Blazor Client Side,Blazor Webassembly,我只有一个简单的问题。 有没有办法热加载blazor应用程序?至少,.razor文件? 现在我在本地IIS(不是IIS express)上托管我的应用程序 我在网上浏览,但没发现任何有用的东西 感谢大家的支持:)也许您可以尝试在命令提示符下运行应用程序: dotnet watch run debug 更新2021-04-09: 对.NET 6预览3的.NET热重新加载初始支持 将“hotReloadProfile”:“aspnetcore”属性添加到launchSettings.json中的启
感谢大家的支持:)也许您可以尝试在命令提示符下运行应用程序:
dotnet watch run debug
更新2021-04-09: 对
.NET 6预览3的.NET热重新加载初始支持
将“hotReloadProfile”:“aspnetcore”属性添加到launchSettings.json中的启动配置文件中。对于Blazor WebAssembly项目,请使用“blazorwasm”热重新加载配置文件
使用dotnetwatch
运行项目
您可以在中找到支持的代码编辑列表
谢谢@Quango指出这一点
更新2020-04-09:
我没有使用浏览器同步
而是在\u Host.cshtml
下添加了以下代码
原件:
根据Blazor项目的@danroth27,计划在2020年11月对.NET 5进行热重新加载
正如@MauricioAtanache所说,您可以使用dotnet watch,但不要忘记添加要观看的文件。例如:
dotnet watch --project BlazorTest.Server run
BlazorTest.Server.csproj文件:
<ItemGroup>
<Watch Include="..\**\*.razor" />
<Watch Include="..\**\*.scss" />
<Watch Include="..\**\*.cs" />
</ItemGroup>
在Github上还有一个由@martasp创建的名为BlazorLiveReload
的项目,该项目应该能够在不刷新页面的情况下处理Blazor Live Reload
作者:
它使用razor引擎版本3将组件编译为c#类。
然后,我使用Roslyn编译器将这些类编译成汇编。
最后,我从一个程序集中加载了app.razor组件
反射和使用Steve Sanderson测试主机修改库I
将组件转换为纯HTML。为了实时提供HTML文件,我使用了
WebSocket具有全双工通信
我自己还没有测试过这个项目,所以我不能说它工作得有多好
有关该问题的一般线索:
现在LiveSharp()中支持有状态Blazor热重新加载
您可以看到它在这里工作:
LiveSharp是一个商业工具,允许您在运行时更新C代码
免责声明:我是作者
<ItemGroup>
<Watch Include="..\**\*.razor" />
<Watch Include="..\**\*.scss" />
<Watch Include="..\**\*.cs" />
</ItemGroup>
这不是您可能期望的热重新加载,但它会自动执行重新运行过程。您只需等待几秒钟,然后重新加载页面 只需使用CTRL+F5启动项目(无需附加调试器),进行更改并重新加载页面。Thijs Tijsma有一个适合我的方法
您必须在Visual Studio中没有附加调试器的情况下运行(Visual Studio中的CTRL+F5)
在页面\\u host.cshtml
添加
然后重新加载js
文件
wwwroot\scripts\HotReload.js
@if (env.EnvironmentName != "Production") {
<script>
window.Blazor.defaultReconnectionHandler.onConnectionDown = function () {
console.log('reloading')
window.location.reload();
};
</script>
}
window.Blazor.defaultReconnectionHandler.onConnectionDown=函数()
{
window.location.reload();
};
疼痛史
目前还没有真正好的解决方案可以自动重新编译更改的零件并尽可能节省时间,如“编辑并继续”。另一个可悲的事实是,自2018年以来(!)。他们承诺最终用.NET6解决这个问题。我们将看看这是否更值得,因为在社区的压力下,他们。大约6个月后,他们不得不说
调试的变通方法
什么不起作用
运行dotnet watch run
是一件好事,但当您想要使用调试器时,它会达到其限制。即使使用dotnetwatchrundebug
,我也无法将visualstudio附加到进程,从而使其达到断点。我还尝试让VS运行dotnet watch run debug
,在launchSettings.json中使用以下配置文件条目:
"WatchDebug": {
"commandName": "Executable",
"executablePath": "dotnet.exe",
"commandLineArgs": "watch run debug",
"workingDirectory": "$(ProjectDir)",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
当文件发生更改时,进程启动并重新启动,但未命中断点。也不能使用dotnet运行-c debug
,但不起作用,即使在使用IIS Express时也不起作用:
我找到的唯一解决调试问题的方法
在\u Host.cshtml
@inject IWebHostEnvironment env
并在blazor.server.js
@if (env.EnvironmentName != "Production") {
<script>
window.Blazor.defaultReconnectionHandler.onConnectionDown = function () {
console.log('reloading')
window.location.reload();
};
</script>
}
确保env变量在开发期间仅设置为Debug
,否则设置为Production
。打开给定Url上的浏览器。如果选择该配置并应用了更改,请按[Ctrl]+[Shift]+[F5]
。这将重新启动调试器,然后浏览器重新连接,您将看到更改。在hello world Blazor服务器应用程序上,这大约需要3-4秒。非常感谢!它正在按它应该的方式工作。祝你有美好的一天!实际上,我必须将它与:Blazor.defaultReconnectionHandler结合使用。_reconnectCallback=function(d){document.location.reload();}是的,这非常有效。它可以使页面在发生更改时自动重新加载-虽然不是完全无缝,但几乎可以。应该提到的是,根据个人/业务使用情况,每月的费用介于9.90欧元和19欧元之间。看起来热加载功能不会随.NET 5一起提供:热加载对我来说不适用于这些方法。尽管有一些调整,它还是可以工作的。从Powershell运行2个窗口:1<代码>网络观察运行
,2<代码>浏览器同步启动--代理https://localhost:5001/ --文件“bin/Debug/netstandard2.1/BlazorApp.dll”
。否则,浏览器同步触发得太早,会错过同步changes@axon这太棒了-它很有效,谢谢!进一步更新:现在启用热重新加载properHow以使用热重新加载调试客户端?
"WatchDebug": {
"commandName": "Executable",
"executablePath": "dotnet.exe",
"commandLineArgs": "watch run debug",
"workingDirectory": "$(ProjectDir)",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
@inject IWebHostEnvironment env
@if (env.EnvironmentName != "Production") {
<script>
window.Blazor.defaultReconnectionHandler.onConnectionDown = function () {
console.log('reloading')
window.location.reload();
};
</script>
}
"MyProjectWithoutBrowser": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"dotnetRunMessages": "true",
"applicationUrl": "http://localhost:5000"
}