Aspnetcore: Blazor的热装

创建于 2018-01-25  ·  130评论  ·  资料来源: dotnet/aspnetcore

  • [] [构建性能优化](https://github.com/dotnet/aspnetcore/issues/22566)
  • []通过dotnet watch
  • []开发中间件(Websocket连接以接收更新)
Components Big Rock Design affected-most area-blazor enhancement severity-major

最有用的评论

这是针对计划于2020年11月的.NET 5计划的。我们仍然在这里就如何采取这种方法进行大量讨论。

所有130条评论

有关此工作项的状态更新,请参见https://github.com/aspnet/blazor/issues/193

现在,我们可以使用dotnet watch run并在每次发生更改时重新编译。
只是在csproj文件中使用它:
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
<Watch Include="**\*.cshtml"/>

我们在实时重新加载方面遇到了一个障碍,即0.2.0,因此请解决此问题,直到可以进行更可靠的设计为止。

嗨,我在Mac下使用dotnet sdk 2.2.100-preview1-009349和blazor 0.5.1。
使用“ dotnet blazor服务”无法进行实时重新加载。 如果我在cshtml文件中更改了一些html标记,则该应用程序不会重新加载自身,并且在手动重新加载浏览器之后,该应用程序会显示旧的html内容。 我该如何解决?

@ danroth27 ,那么https://github.com/aspnet/AspNetCore/issues/4056是什么? 它应该关闭吗?

几个问题!
1这是否跟踪服务器端和客户端的实时重新加载?

  1. live reload是否会在发布时发布(即在net core 3.0中)?
  2. 实时重新加载机制会丢失页面状态(即等同于f5刷新),还是会表现得与JavaScript领域中的“热模块替换”类似-即只有更改后的组件用户界面才会重新呈现? 如果是后者,是否存在一种机制可以在两次更新之间保留客户端上的组件状态?

是否跟踪服务器端和客户端的实时重载?

live reload是否会在发布时发布(即在net core 3.0中)?

对于.NET Core 3.0,我们希望支持基于文件更改的自动重建,但是您仍然需要手动刷新浏览器。

实时重新加载机制会丢失页面状态(即等同于f5刷新),还是会表现得与JavaScript领域中的“热模块替换”类似-即只有更改后的组件用户界面才会重新呈现? 如果是后者,是否存在一种机制可以在两次更新之间保留客户端上的组件状态?

我们目前尚无计划以保留客户端状态的方式支持热模块更换。

我们目前尚无计划以保留客户端状态的方式支持热模块更换。

至少不是自动地。 从理论上讲,如果您遵循类似Redux的体系结构,或严格将状态与显示脱钩的任何其他方法,则可以在卸载之前将其序列化并重新加载。 但是,这并不是我们计划采用的功能,因为并非每个人都希望遵循这种架构。

那么您可以先将该状态序列化,然后再卸载并重新加载。

谢谢。 一旦准备好,请您能够记录设计中提供的相应钩子(在卸载/重新装载等之前),以方便进行此操作。 我想从一个实现/ helper nuget包开始,为那些需要它的人启用这种模式!

无法使dotnet watch run正常工作,也尝试了以下方法和其他选择,

dotnet watch --project "Portfolio.Client" run --project "Portfolio.Server"

刚结束时使用nodemon了以下粗略解决方案:

npx nodemon --watch "Portfolio.Client" -e razor,css,html,cs --exec 'dotnet run --project "Portfolio.Server"'

我以为我应该跑步:
dotnet watch --project BlazorTest.Client run
但这给了我一个错误。

如果我使用过:
dotnet watch --project BlazorTest.Server run

在项目BlazorTest.Server.csproj文件中包含以下内容:

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

它在BlazorTest.Client项目中获取了更改并重新启动了服务器,因此我只需要在浏览器中进行手动刷新即可。

它在BlazorTest.Client项目中获取了更改并重新启动了服务器,因此我只需要在浏览器中进行手动刷新即可。

这是否意味着每次css, html更改时服务器都会重新启动?

@dazinator ,是的:-)

..好的,只是检查,但这是一件坏事吧? 即,对于html或css文件更改,服务器重新启动应该是不必要的,因为浏览器刷新(缓存无效)就足够了吗?

你说得对,那不是必须的。 只需在<ItemGroup>内添加或删除您感兴趣的文件扩展名即可。 更新了我的答案以避免混淆。

很抱歉,如果没有话题,现在是否有从Visual Studio(Blazor客户端)实时重新加载的内容? 现在,除了wwwroot文件外,对于所有更改,我都必须构建项目(Ctrl Shift B)并重新加载浏览器。 如果VS可以基于保存的更改自动构建,那就太好了。

@datvm我们已经为服务器端Blazor项目启用了此功能,但是我们需要做一些工作才能再次为客户端Blazor项目和Razor类库启用此功能。 现在我们将重点放在发布.NET Core 3.0上,可能需要一点时间。

对于客户端,您可以使用在服务器上发生某些更改时仅刷新整页的任何操作。 无耻的插件:签出NetPack-运行示例项目并导航到/ BrowserReload示例: https :

感谢您的解决方案,实际上可能对其他人有用。 对我来说,这只是QoL的改进,没有什么关键的。 仍然喜欢产品和每个人都在付出的努力。Ctrl Shift B的额外按下对我有效(现在)。

我的解决方案当前如下所示:
我有一个单独的exe BlazorDebugLauncher,该文件是通过将启动浏览器的端口和主机名参数化为launchsettings.json来启动的。
然后

  • 启动一个分离的小型exe DebugAttacher,它可以分离并重新连接Visual Studio
  • 启动在项目文件夹上运行的dotnet watch
  • 服务器进程启动后立即刷新浏览器(与MS Edge兼容:-))

如果有人感兴趣,我可以把它放在某处...

@AdmiralSnyder如果您想分享,我一定会很感兴趣的!

值得一试: https

这是我的解决方案。 有点hacky,但是可以用: https :
(我将在下周清理并添加自述文件……)

@dazinator您碰巧看到了吗?

@AdmiralSnyder我看了一下,感谢您的分享,我很想知道您是如何/是否附加调试器的-我有一些vs扩展开发背景,您看:-)
我已经确定了这种重新加载浏览器的方法(毫无疑问,这是我自己的库) https://github.com/dazinator/NetPack/blob/develop/src/NetPack.Web.Blazor.Host/Startup.cs-运行应用本身内部的观察者(使用IFileProvider),而不是启动任何外部进程,它使用信号r和添加到blazor布局的blazor客户端组件触发重新加载。 它在Preview6中对我一直很好,我将很快升级到Preview7,并希望它继续工作:-)

我不想将刷新功能引入该项目。 您如何在没有外部进程的情况下缩小detach-rebuild-restart-reattach的差距?

我不想将刷新功能引入项目

您不必严格意义上将它们带入项目。 例如,您可以在编译符号上包含带有条件的包引用(即debug = true),并且可以将启动代码放在编译指令中(#if debug)-现在,当您以发布模式运行应用程序时,其中包含设计时软件包或代码。

您如何在没有外部进程的情况下缩小detach-rebuild-restart-reattach的差距?

因为我从VS运行宿主项目,所以它可以根据需要重建引用的blazor客户端项目(netpack监视blazor项目IFileProvider),而不必停止或脱离宿主进程。 唯一的“差距”是我是否需要对主机应用程序本身(而不是blazor客户端)进行代码更改。 在那种情况下-我非常希望有一天“编辑并继续”将再次生效,因为这将解决最后一个问题。 但是如果没有这些,我的方法有两种选择:

  1. 不要使用VS运行主机,请使用dotnet run watch ,然后手动附加调试器(很痛苦)
  2. 停止VS,对主机进行更改,然后再次启动VS(这通常是我要做的)
    @AdmiralSnyder编辑了此内容,希望可以更好地解决您的问题

我看到〜10秒使用dotnet watch进行重建。 是否有任何计划来加快增量构建? 当迭代组件时,这是相当痛苦的。

看起来大部分时间都花在构建剃须刀组件上,这是否意味着这些构建时间将呈线性增长? (使用更复杂的应用需要30秒钟以上的构建时间?)

是否有任何计划来加快增量构建? 当迭代组件时,这是相当痛苦的。

如果这是客户端Blazor,请考虑禁用Debug构建的链接。

  <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <BlazorLinkOnBuild>false</BlazorLinkOnBuild>
  </PropertyGroup>

我与一些对自动重建和自动刷新感到困惑的人进行了交谈。
这主要是由于以下事实:当您在Visual Studio中更改代码时,将启动自动重建功能,并且您还会看到浏览器中出现“某些东西”。 经常将这些东西误认为是实时重新加载尝试。
然后(由于signal-r连接无法重新连接到旧状态),您将获得“无法重新连接到服务器”。 错误。 但是,对于Blazor的新手来说,系统似乎尝试了自动刷新,但操作失败,这是糟糕的体验。

由于实时重新加载功能上没有ETA,如果由于构建而导致连接中断,是否可以不尝试自动重新连接? 或者至少给出更好的错误消息,而不是诸如“刷新浏览器”之类的“无法重新连接到服务器”?

@chucker感谢禁用链接提示。 这会稍微增加构建量,但是随后的浏览器重新加载要慢得多,因为它现在下载了更多的文件-我不确定总体上是否有帮助:-)但值得知道。
如果有人好奇地看到blazor重新加载(针对blazor客户端/ wasm)项目,您可以在此处运行该项目以了解我的意思: https :

@Postlagerkarte我们确实尝试重新连接,但是由于在回收进程时服务器状态消失了,因此重新连接失败。 我们已经在此空间中进行了一些工作,以尝试改善用户体验。 请参阅“预览8”公告博客文章中的“改进的Blazor Server应用程序重新连接逻辑”部分。

@Postlagerkarte改进之处在于错误消息preview8

根据实时重新加载的时间/时间表,是否值得考虑一个单独的问题来提高编译速度? 也许通过类似于MVC / cshtml的工作原理的缓存策略(我相信只有已更改的视图才能重新编译)? 这里有潜在的低挂水果吗?

现在,从更改到在浏览器中看到它之间的10秒周期时间只是一个很大的问题,并且比具有类似应用程序规模的基于Webpack的平台要大得多。 需要明确的是,我在这里只是在谈论服务器端。

是否值得考虑一个单独的问题来提高编译速度?

是的,如果您发现构建时间很慢,请提出有关构建环境详细信息的问题。

当您对组件进行较小的“仅HTML”更改(例如,更改一些静态html内容)时,必须重新加载整个blazor客户端应用程序(重新下载所有dll)是不是很理想。

团队是否有任何东西可以追踪这种经验的改善,还是我应该打开一个新的期刊?

@dazinator从问题标题

就我个人而言,我不介意按F5键,因此不考虑将热装功能作为顶级Prio功能使用,
但是,要进入流程,我发现至关重要的是
更改代码,f5,更改代码,f5,更改代码的工作流程正在迅速发展。 请首先处理:)

我们已经为服务器端Blazor项目启用了此功能,但是我们需要做一些工作以再次为客户端Blazor项目和Razor类库启用此功能。 现在我们将重点放在发布.NET Core 3.0上,可能需要一点时间。

从我从各种GitHub问题中可以得出的结论来看,实时重装仅适用于无需调试即可运行的服务器端Blazor(开发人员必须强制刷新页面)。 那是对的吗? 我找不到有关该主题的任何权威性文档。

我们现在拥有的实际上是对ASP.NET Core项目的自动重建支持,VS将在其中监视文件系统的更改,然后自动重建并重新运行该项目。 它仅在附加调试器以及当前项目中的文件时才起作用(不监视相关项目)。

万一连接丢失的原因是构建,是否可以禁用自动重新连接尝试? 还是在开发时完全禁用自动重新连接? 我只想摆脱那些失败的重新连接尝试,因为它们使我烦恼并且无论如何我都按F5 :)

因此,使VS自动分离并重新连接应该相当容易,对吗?

是否可以通过调试获得Blazor Server Apps Live Reloading的最终解决方案?

@ bansalankit2601将在.NET 5.0中实现

我以dotnet watch run身份运行观察程序,并使用VS编辑代码。 保存后,代码将重新编译,浏览器将锁定,并告诉我应该重新加载。

我厌倦了按F5键,宁愿在调整时仍停留在VS中,所以TamperMonkey可以进行救援:

```// == UserScript ==
// @name重新加载页面
// @namespace http://tampermonkey.net/
// @version 0.1
// @description试图占领世界!
// @作者
// @match http:// localhost :5000 / *
// @grant none
// == / UserScript ==

const reloader = () => {
    if (document.body.innerText.indexOf("Reload the page") >= 0) document.location = document.location;
    else setTimeout(reloader, 300);
}
console.log('Blazor reloader installed');
setTimeout(reloader, 300);

```
允许脚本在http:// localhost :5000 / *上运行

这适用于服务器端: https :

客户端每200毫秒ping服务器一次。 当服务器由于从dotnet watch run重新编译而关闭时,将切换一个标志,并且当服务器返回时,它将自动F5s。

该存储库对我不起作用,但是我打开了一个确实起作用的JavaScript问题(至少对我而言适用于3.0)

目前“实时重新加载”的状态是什么。 是否支持(浏览器中没有F5)?
如果没有,是否有计划发布此功能?

最新消息是什么? 自上次更新以来2.5个月...

我也在等着。

这是针对计划于2020年11月的.NET 5计划的。我们仍然在这里就如何采取这种方法进行大量讨论。

对于Blazor服务器端,如何使用处理断开连接的机制:

@dharmaturtle提出了一种每

如果您从javascript blazor客户端覆盖Blazor.defaultReconnectionHandler._reconnectionDisplay ,则可以捕获断开连接并开始获取服务器,然后等待其重新启用。

好处是,仅在服务器断开连接时您才有请求。

缺点是'_reconnectionDisplay'是私有成员,您知道...这很邪恶。

为了缓解这种情况,请将javascript代码括在<environment include="Development"> 。 它不会在生产服务器中流血。

完整回购在这里。

几分钟前我刚刚切换到此解决方案: https :

它不会持续对服务器执行ping操作,并且如果更改位于.html,.css或.js文件中,它也不会重新编译整个.sln; 它只是重新加载页面,很棒。

只是在这里链接另一个示例,与上面的方法有些不同。 只需运行项目-它不需要客户端wasm项目上的dotnet监视。 如果您更改客户端wasm的wwwroot文件夹中的任何CSS,HTML或JS文件,它将立即重新加载。 如果您更改客户端wasm项目中的任何代码(如剃刀文件等),它将重新生成然后重新加载。您可以在startup.cs中对其进行控制,因此这与其他解决方案有些不同。 如果您仍然碰巧还在使用必须在项目中进行预处理的javascript或其他静态文件,那么您还可以在同一回购中找到可能有用的其他示例,例如SystemJS HMR,汇总等。

https://github.com/dazinator/NetPack/blob/develop/src/NetPack.Web.Blazor.Host/Startup.cs

制作了一个可在运行时编译剃须刀组件的库。

LivePreview

在反应中,我们有热模块更换功能,此功能使我们可以更改代码并立即在浏览器中查看更改。 我们可以使用Roslyn编译器在blazor中做出类似的功能。 在运行时编译剃须刀组件,并使用文件监视程序在每次文件更改时与WebSockets一起使用。

这个怎么运作

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

怎么会更好

固定路由而不是使用/ preview,可以通过将WebSocket客户端注入每个HTTP请求上下文中来实现。

在Blazor Web程序集中,也许我们可以在浏览器中加载和卸载程序集?

使用两台构建服务器,其中一台用于快速预览,另一台服务器使用dotnet watch进行构建,以实现实际更长的构建。

在Blazor Web程序集中,也许我们可以在浏览器中加载和卸载程序集?

资料来源: https :

@martasp

在Blazor Web程序集中,也许我们可以在浏览器中加载和卸载程序集?

这是执行blazor wasm应用程序的mono运行时的版本,但是不幸的是,您不能创建新的AppDomain(据我所知),也无法从默认AppDomain卸载程序集。

您可以延迟加载程序集,这是我当前仅在首次使用时动态加载组件程序集的方式(以加快初始应用程序加载时间),但是一旦加载它们,唯一可以加载新版本的方法就是要将同一程序集的新版本加载到同一AppDomain中,并将所有引用切换到该新引用-保留旧引用-不知道是否支持该功能,因为我尚未尝试。 如果您确实在道路上行驶; 让我知道!

我希望有一天我们可以在浏览器中运行.net核心运行时,而不是它对AssemblyLoadContexts和Assembly.Unload()的支持

@ danroth27
你看过https://www.livesharp.net/吗?
它在运行时替换代码

有一个展示柜,可在其中实时更新Blazor (尽管需要导航并返回当前路线)。
还有一个展示,其中甚至循环中的控制台输出文本都在运行时被替换了

这与我希望的体验非常接近!

很棒的@warappa 。 我不知道它是如何工作的! 我可以想到一些用动态代理替换方法的可能机制。
但是,它的工作原理,对开发人员来说是很荣幸的。 我也希望获得这样的体验,但是最好不要使用单独的开发服务器,我更喜欢在VS中单击“播放”。

@dazinator LiveSharp Server序列化更新的代码,并将其发送到应用程序。 然后,应用程序将其反序列化为“表达式树”,并将其注入更新的方法中。 内部还有很多事情要做,但这就是要点。

顺便说一下,LiveSharp Server只需要启动一次。 之后,您只需像平常一样启动应用程序即可。

这是使用LiveSharp进行有状态Blazor热重装的演示: https : = MCh5-44UBpM

免责声明:我是LiveSharp的作者

@ionoy的荣誉在那里很棒!

到目前为止,为Blazor开发的经验非常痛苦。 编辑,重建,刷新,调试...
很乐意每月支付9美元,直到问题解决为止,这将使生产力提高至少5倍。

在设计时,请考虑到并非所有人都使用Visual Studio。 谢谢

@wocar LiveSharp已经跨平台,并且不依赖于任何IDE。 因此,理论上您可以将其与notepad.exe一起使用

@wocar如果您不使用VS,则还可以考虑dotnet watchhttps : //docs.microsoft.com/zh-cn/aspnet/core/tutorials/dotnet-watch

@SteveSandersonMS-毫无疑问dotnet watch杀死状态。 LiveSharp实际上可以在不强制重新加载的情况下推送更改,因此可以通过即时反馈循环对UI进行微调。 我真的希望你们能尽快实施等效的计划,这是非常需要的。

当然是。 我并不是说它与LiveSharp相同。 只需确保@wocar知道该选项。

谢谢。 已经下载了Livesharp并运行良好,希望看到类似的实现。

别误会我,你们做的很棒,但是,如果您想得到诚实的反馈,调试blazor会很痛苦。 我使用过dotnet watch,它的工作原理(很慢),并且我无法调试(至少不能在Rider中进行调试),以至于我想使用由于productivit而无法使用的blazor。 因此,我决定改用剃须刀页面。

谢谢。

感谢您的反馈,@ wocar! 我知道热装很重要。 这是我们强烈希望添加的内容,并且正在研究一般将其引入.NET 5的方法。

我无法调试(至少不能使用Rider进行调试)

您可能已经知道,但以防万一,如果使用浏览器作为.NET调试器,则可以以IDE独立的方式进行调试: https :

您可能已经知道,但以防万一,如果使用浏览器作为.NET调试器,则可以以IDE独立的方式进行调试: https :

谢谢你没有意识到。

如果我使用剃须刀页面(.cshtml)并修改HTML,然后至少按F5键,则可以看到更改。 为什么Razor Components(.razor)无法做到这一点

我也希望获得更快的开发周期。 一旦我们为Vue提供了热重装功能,那么进行更改并在1.0-2.0秒后在浏览器中看到它就很好了。 现在我看到这里需要类似的东西。

dotnet watch run让我们进入了其中的一部分-是否会有一个更简单的中间答案,也许是某种加快构建速度的方法,以便在.razor文件没有改变的情况下更快地进行构建? 正如上面的dbulic所述,这并不能避免需要重新启动Web主机并重新加载页面,但是必须等待1秒而不是20秒才能进行构建。

是否有计划通过在浏览器中运行.razor文件的“运行时编译”来解决此问题,类似于服务器上可用的.cshtml文件的运行时编译? 例如,.razor文件本身直接加载到浏览器中(而不是预编译的程序集),然后在此处进行编译,然后在服务器上对其进行编辑,可以将更改后的.razor文件重新加载到浏览器中并在那里重新编译? 我喜欢这里与cshtml的相似之处,并且想知道这是否是一条正在考虑的路径?

这是针对计划于2020年11月的.NET 5计划的。我们仍然在这里就如何采取这种方法进行大量讨论。

@ danroth27 ,方向已经定型了吗? 如果没有什么可分享的,那么可能会在Build 2020上看到一些东西吗?

嗨@mrlife。 我们希望主要关注BUILD上的Blazor WebAssembly版本。 我们希望对.NET 5支持热重载。具体实现方式尚未确定。

我经常考虑这个问题。 每天,我都使用模式1。与模式1相比,模式2实际上是一种范式更改; 与直接改进模式1相比,这样做不容易采用。 我希望模式3接近可以实现的水平。 我觉得模式4仅是基于上面的评论,但在了解了MAUI中的可能之后,模式6看起来确实不错。

模式1(开箱即用):

  1. 将更改保存到任意数量的文件
  2. 单击一个按钮或按键盘命令进行编译
  3. 刷新浏览器

模式2( dotnet watch run ):

  1. 将更改保存到一个文件
  2. 自动重新编译
  3. 保存任何其他需要的文件,并等待其他重新编译
  4. 刷新浏览器

模式3:

  1. 将更改保存到任意数量的文件
  2. 不需要部分编译
  3. 刷新浏览器

模式4:

  1. 将更改保存到任意数量的文件
  2. 浏览器反映其当前状态的变化

模式5(如MAUI热重装):

  1. 不要将更改保存到文件
  2. 浏览器反映其当前状态的变化

有什么可以实现的?

我当前的dotnet watch run

  1. 使用Ctrl Shift S将更改保存到所有文件
  2. 自动重新编译
  3. 这里介绍

这个问题是针对Blazer Server和Web Assembly跟踪热生成/重新加载,还是针对Web Assembly单独进行?

这是什么状态? 当前使用https://github.com/OYIon/LiveSharp

这一切都是非常不舒服的。 我也无法从.dcproj aka docker-compose项目中使用dotnet watch解决方法
目前在* *中

伟大的技术也需要伟大的工具!

事物始终以红色突出显示,而智能感知仅适度发挥作用。

同样在这里,我的解决方法:

  • 杀死devenv.exe
  • 删除.vs \文件夹
  • 重新启动专案

工具将再次起作用。 每天执行几次。 重构后,每小时可运行几次。 尝试将其与您的咖啡机之旅相结合

事物始终以红色突出显示,而智能感知仅适度发挥作用。

我知道这很困难,但是您对此有任何再现步骤吗? 例如,您是否拥有一些可以共享的项目代码,在特定版本的VS或VS Code上,这些代码可以可靠地产生不正确的智能感知或错误? 我们绝对希望找到并解决所有此类问题。

cc @NTaylorMullen-您是否知道可以在此处采取任何诊断步骤来帮助我们进行追踪?

@SteveSandersonMS

简单:

  • 重命名现有的剃刀组件文件

image
(具有相同前缀的文件也将重命名)

image

  • 更新部分类中的类名称

  • 更新/重命名其他组件中的引用(手动,高度错过的工具功能)

  • 建筑工程

  • 模具破损

image

  • 删除.\vs文件夹后vs恢复

事物始终以红色突出显示,而智能感知仅适度发挥作用。

我知道这很困难,但是您对此有任何再现步骤吗? 例如,您是否拥有一些可以共享的项目代码,在特定版本的VS或VS Code上,这些代码可以可靠地产生不正确的智能感知或错误? 我们绝对希望找到并解决所有此类问题。

cc @NTaylorMullen-您是否知道可以在此处采取任何诊断步骤来帮助我们进行追踪?

感谢您的回复,我会一直关注。 正如JvanderStad所举的例子,每种重构都绝对有问题。 否则,到目前为止我看不到任何模式。
例如,我刚打开了219行文件,却收到167个intellisense错误。 规则:CS0121 CS0229 CS1503

创建一个额外的github问题来收集智能感知问题也许有用吗? 还是已经存在? 因为这个问题绝对是错误的地方。

感谢您的回复,我会一直关注。 正如JvanderStad所举的例子,每种重构都绝对有问题。 否则,到目前为止我看不到任何模式。
例如,我刚打开了219行文件,却收到167个intellisense错误。 规则:CS0121 CS0229 CS1503

创建一个额外的github问题来收集智能感知问题也许有用吗? 还是已经存在? 因为这个问题绝对是错误的地方。

几乎是如果intellisense db损坏/语言服务崩溃,在VS重新启动后它仍然存在

  <entry>
    <record>1268</record>
    <time>2020/07/08 14:35:36.779</time>
    <type>Error</type>
    <source>Editor or Editor Extension</source>
    <description>System.TimeoutException: The operation has timed out.&#x000D;&#x000A;   at Microsoft.WebTools.Languages.Html.VS.ContainedLanguage.Server.DotNetCoreServerContainedLanguageSupport.OnIdle(Object sender, EventArgs e)</description>
  </entry>

我使用的是rider而不是vs,而且效果很好。 另外,我使用的是名为liveharp的工具,虽然效果不佳或不可靠,但它可以完成工作,而且无需重新编译即可获得UI更新。

@ cubed-it此PowerShell会杀死Visual Studio,删除.vs \文件夹,然后重新启动解决方案。 减少咖啡旅行次数。

$start = New-Object Collections.Generic.List[string]

Write-Host "Looking for Visual Studio"  -BackgroundColor DarkGreen
$devenvs = Get-CimInstance Win32_Process -Filter "name = 'devenv.exe'" | Select-Object CommandLine, ProcessId

foreach ($devenv in $devenvs) {

    Write-Host $devenv

    $index = $devenv.CommandLine.IndexOf("devenv.exe`" `"")
    if ($index -eq -1)
    {
        Write-Host "No params"  -BackgroundColor DarkRed
        continue
    }

    $param = $devenv.CommandLine.Substring($index + 12).Trim()
    $project = $param.Trim('"')
    if ($project.Length -eq 0)
    {
        continue
    }

    #allowed project files
    $slnTypes = New-Object System.Collections.Generic.HashSet[string]
    [void]$slnTypes.Add(".sln")
    [void]$slnTypes.Add(".slnf")

    #
    Write-Host "Project: $project"

    $extension = [System.IO.Path]::GetExtension($project)
    if (-not $slnTypes.Contains($extension))
    {
        Write-Host "No solution" -BackgroundColor DarkRed
        continue;
    }


    $vsFolder = [System.IO.Path]::GetDirectoryName($project)
    $vsFolder = "$vsFolder\.vs\"

    if ([System.IO.Directory]::Exists($vsFolder) -eq $false)
    {
        Write-Host ".vs\ folder does not exist" -BackgroundColor DarkRed
        continue
    }

    #we will restart later
    [void]$start.Add($devenv.CommandLine)

    #kill visual studio
    Write-Host "Kill: $devenv" -BackgroundColor DarkGreen
    Stop-Process -id $devenv.ProcessId -Force

    #remove devenv folder
    Write-Host "Removing: $vsFolder" -BackgroundColor DarkGreen
    Remove-Item -Recurse -Force $vsFolder
}


foreach ($devenv in $start) {

    $program =  $devenv.Substring(0, $index + 11)
    $arguments =  $devenv.Substring($index + 12)

    Write-Host "Starting: '$program'"  -BackgroundColor DarkGreen
    Write-Host "Arguments: '$arguments'"  -BackgroundColor DarkGreen

    Start-Process -FilePath $program -ArgumentList $arguments
}

对于想要坚持使用VS的人,您可以使用此扩展来解决( https://marketplace.visualstudio.com/items?itemName=pragmatrix.BuildOnSave ),该扩展基于保存自动建立并且只能启用以启动项目(本例为您的blazor项目)。 为了获得更好的体验,请在VS中关闭“午餐浏览器”,以使其不会自动关闭浏览器。 但您必须在浏览器上按F5 :-(

完全感到您在使用Razor工具方面的所有痛苦。 幸运的是,这是我们希望在.NET 5时间范围内解决的问题。 如果您想尝试使用此工具(当前警告它是超级实验性的),则可以下载最新的VS预览版本,并选中以下预览功能复选框(工具->选项->环境->预览功能):

image

很可能会解决本期中提到的许多Razor编辑器问题。 话虽这么说,与现有编辑器相比,我们知道新编辑器存在一些差距,甚至还有一些错误,但是我们很想听听您的反馈意见,无论它是否总体上可以满足您的需求。

下载最新的VS预览版本
https://visualstudio.microsoft.com/vs/preview/

@NTaylorMullen我可以记录有关Razor工具的错误吗? 最新的预览根本不起作用:(

image

@JvanderStad我相信语法应该是"@(row => ...

@JvanderStad我相信语法应该是"@(row => ...

在当前版本中工作正常

image

我想念Daniels的博客。 我现在知道会发生什么。 n

@NTaylorMullen我可以记录有关Razor工具的错误吗? 最新的预览根本不起作用:(

Ya C#语义着色是我们在新编辑器中尚未实现的功能😄

@ danroth27如果由于体系结构而导致blazor wasm的热重装比较棘手,那么您认为blazor服务器的热重装可以做到这一点。 这个想法是在开发过程中通过服务器渲染器无缝渲染剃刀组件(来自blazor wasm项目),并保持所有兼容性检查,以确保blazor wasm部署并在实际wasm模型中进行最后阶段的测试和部署。

是否有任何用于热重装的更新,是在.net5中发布还是在预览中已经发布?

@ qin-guan由于该版本中的时间有限,因此不计划对.NET 5进行热重装。 我们希望为.NET 6提供热重装。

@ danroth27啊啊,嘘

请原谅我可能有偏见并且也许是愚昧无知的观点,但是我有时会觉得提高生产率会在提高性能方面退居二线(其中投入了大量工作

例如,我很乐意看到有关您对该工具进行250项生产力改进的博客。
从我个人的角度来看,如果开发人员没有获得所需的生产性工具链,他们将无法快速推出该软件以击败竞争对手进入市场,结果是,他们的应用程序将无法生存。市场获得所有这些出色的闪亮性能增强的好处。 因此,从这个角度来看,这有点恶化。

但是,我喜欢性能改进的外观。我只是真的希望.NET 6不会落后于.NET 5,并且我们看到Blazor的生产力开始赶上其他框架!

@ qin-guan由于该版本中的时间有限,因此不计划对.NET 5进行热重装。 我们希望为.NET 6提供热重装。

太可惜了,我正在等待.net5的此功能😭😭😭

@dazinator @ buster95我们分享您的失望! 热重载几乎是我们要在.NET 5中完成的工作的顶部,但仍然接近待办事项的顶部。 最初,它是.NET范围内更广泛的热重装工作的一部分,但后来全部推到了.NET6。做好热重装是一个棘手的问题-这意味着找到可靠的方法来尽快更新运行的应用程序高保真。 与.NET 5中可用的功能相比,只需要更多的时间就能做好。

为了提高开发人员的工作效率,我们正在完全改进Razor编辑器,它应支持Blazor开发的大量工作效率功能(重构,转到def / impl,代码操作等)。 我们作出了新的编辑器可用在本月初的首次可选的预览功能,我们预计,使其默认剃刀编辑器很可能在明年年初。

.NET 5中还提供了许多其他Blazor框架功能,包括CSS隔离,延迟加载,设置UI焦点,修改HTML Head,文件上传,受保护的浏览器存储,虚拟化等。

@dazinator @ buster95我们分享您的失望! 热重载几乎是我们要在.NET 5中完成的工作的顶部,但仍然接近待办事项的顶部。 最初,它是.NET范围内更广泛的热重装工作的一部分,但后来全部推到了.NET6。做好热重装是一个棘手的问题-这意味着找到可靠的方法来尽快更新运行的应用程序高保真。 与.NET 5中可用的功能相比,只需要更多的时间就能做好。

为了提高开发人员的工作效率,我们正在完全改进Razor编辑器,它应支持Blazor开发的大量工作效率功能(重构,转到def / impl,代码操作等)。 我们作出了新的编辑器可用在本月初的首次可选的预览功能,我们预计,使其默认剃刀编辑器很可能在明年年初。

.NET 5中还提供了许多其他Blazor框架功能,包括CSS隔离,延迟加载,设置UI焦点,修改HTML Head,文件上传,受保护的浏览器存储,虚拟化等。

是否有可能创建免费扩展程序,例如https://www.livesharp.net并为所有人免费使用?
image
此扩展程序易于配置,但现在我使用的是15天试用版

我有一个问题,根据当前的计划,热重装是否可以在MacOS上使用? 因为到目前为止,编辑并继续无法使用。

https://github.com/dotnet/runtime/issues/12409

@wocar是的,无论我们提供什么解决方案,都可以跨平台并在macOS上运行。

@ danroth27您能否提供一个性能不佳的解决方案,并且易于使用?
例如,是否具有带有websocket连接的开发中间件,该中间件在缓慢的完全重建后刷新页面?

@ danroth27您能否提供一个性能不佳的解决方案,并且易于使用?
例如,是否具有带有websocket连接的开发中间件,该中间件在缓慢的完全重建后刷新页面?

@xrkolovos(如果您有VS),如果已安装BrowserLink ,则可以使用ctrl-shift-bctrl-alt-enter (在生成后手动进行): https :

您能否提供一个性能不佳的解决方案,并且易于使用?
例如,是否具有带有websocket连接的开发中间件,该中间件在缓慢的完全重建后刷新页面?

我们正在使用.NET 5的dotnet watch来做到这一点: https :

@dazinator @ buster95我们分享您的失望! 热重载几乎是我们要在.NET 5中完成的工作的顶部,但仍然接近待办事项的顶部。 最初,它是.NET范围内更广泛的热重装工作的一部分,但后来全部推到了.NET6。做好热重装是一个棘手的问题-这意味着找到可靠的方法来尽快更新运行的应用程序高保真。 与.NET 5中可用的功能相比,只需要更多的时间就能做好。

@ danroth27 .NET的“更广泛的热重装”是否也适用于非Web项目? 我有什么可以追踪的问题吗?

我们已将此问题移至Backlog里程碑。 这意味着它将不会在即将发布的版本中使用。 我们将在当前版本之后重新评估积压,并在那时考虑此项。 要了解有关我们的问题管理流程的更多信息,并对不同类型的问题有更好的期望,请阅读我们的“分类处理”

谢谢您联络我们。
我们正在将此问题移至Next sprint planning里程碑,以供将来评估/考虑。 当我们为下一个里程碑计划工作时,我们将评估请求。 要了解更多关于下一步的期望以及如何处理此问题,您可以在此处阅读有关我们的分类程序的更多信息。

现在它在.NET5上可用了,我该如何激活它?

现在可以在.NET5上使用了,我该如何激活

Dudeee检查上面的评论,这是为.net 6-preview计划的😢Screenshot_20201112-071336__01.jpg

@ buster95,那么,史蒂夫·桑德森在.NET Conf 2020第1天中2h38mm36ss中执行了什么操作来刷新页面自动?
链接到视频: https :

在2h38mm36ss

@yasserss ,当时<Virtualize>组件。 您可以通过单击YouTube的共享按钮在指定的时间发送正确的视频链接。

@BrunoBlanes对不起,这是它: https : //youtu.be/mS6ykjdOVRg?t=8917

我很确定他正在使用dotnet watch.

如果您在2h:25m:40s中检查视频,他正在使用dotnet watch run来运行应用程序,也许我们在dotnet watch run方面有改进,我记得我上次使用dotnet观看性能不好现在不知道

是的,我们确实在.NET 5中进行了工作,以提高dotnet watch 。 例如,现在每次更改源代码时不运行dotnet restore变得更聪明,并且它能够触发浏览器中的重新加载。

不是热装的最终目的。 我们仍然计划在.NET 6中实现真正的热重装功能,但是.NET 5中dotnet watch perf的改进是向前迈出的一步。

我们还支持在dotnet watch和VS中自动刷新浏览器。 要在VS中启用此功能,您需要设置以下选项:

vs-auto-refresh

这与热重载不同,因为该应用程序仍在重新启动,并且该应用程序已在浏览器中重新加载。 但是,它的确使您可以集中精力编辑代码,而工具可以为您重建和刷新浏览器。

@ danroth27有关使用Visual Studio for Mac自动刷新的任何新闻吗?

@mrlife我们正在寻找即将增加支持的内容。 仅供参考@jongalloway

@ danroth27

我们还支持在dotnet watch和VS中自动刷新浏览器。 要在VS中启用此功能,您需要设置以下选项:

vs-auto-refresh

这与热重载不同,因为该应用程序仍在重新启动,并且该应用程序已在浏览器中重新加载。 但是,它的确使您可以集中精力编辑代码,而工具可以为您重建和刷新浏览器。

启用此功能应该足以在VS2019中进行调试并重新加载保存? 我的意思是,已使用您提到的选项启用了此功能,当我按F5键并开始调试并对代码进行更改时,浏览器不会重新加载。 但是,当我从程序包管理器控制台运行dotnet watch时,它确实可以。 如何在调试时按F5来实现此功能?

通过ASP.NET Core 5发行说明的“使用dotnet监视自动刷新”部分给出的内容,我认为dotnet watch自动刷新在Visual Studio中尚不可用:

我们希望将来将自动刷新功能引入Visual Studio。

@BrunoBlanes现在,Visual Studio 16.8更新提供了自动刷新支持。 您只需要使用我上面指出的选项将其打开即可。 我将更新发行说明以删除该评论。

@porkopek自动重建和自动刷新仅在使用调试器运行时起作用。

即使在Visual Studio 2019 16.8中选择一个选项,自动刷新/构建也不起作用。 有时在保存更改后选择“自动构建并刷新浏览器”时,在Visual Studio弹出窗口中出现空引用异常。 在Visual Studio 2019 16.8中还有什么需要更改才能使其正常工作。 @ danroth27

我了解这将是.NET 6的全部经验。当前的.NET 5和Blazor Webassembly呢?

Blazor Webassemblies的“自动构建和刷新选项”选项是否也应适用? 我应该做些什么(比将此选项设置为:“ Auto build and refresh ...”并转到Filename.razor文件,更改某些内容和CTRL + S?:)应该重新加载浏览器吗?

与浏览器链接如何(或与之相关)?

@MussaratAziz有关此热重装信息的信息不完整,也没有msdn页面。
就我而言,我必须坚持使用IIS Express配置文件并在没有调试器的情况下运行项目。
这使得热重加载或热重启动成为可能,但仅适用于Blazor Server项目。 我尚未测试WASM版本。

我真的希望ASP核心开发团队(您真棒!!)将包括此内容,因为在不使用hotreload的情况下调整UI会很痛苦。

希望有帮助:)

使用LIVESHARP ...简直不敢相信地下室里的一个孩子能做Microsoft无法做到的事情。

编辑:抱歉,不要误会我,Microsoft做的很棒。.但是此功能是必须的.​​..只是为了更改DIV或属性,至少需要45秒

顺便说一句:目前,我正在使用LiveSharp。 是的,对于业余爱好者来说可能会很昂贵,我也希望看到雷德蒙德团队的官方支持。
但是,产品很棒,支持非常好,而且效果很好。
https://www.livesharp.net/blazor/

干杯!

@wocar @ChristianWeyer真的很感谢你们的支持,伙计们! 但是请不要轻视MS的努力。 第三方创建一个全新的解决方案几乎总是比较容易,因为我对任何人都不负责。 这使我可以冒险。

无论如何,更多的合作,更少的对抗。

不,我不是在轻描淡写-反对:-)最后,这是关于prios的。

此页面是否有帮助?
0 / 5 - 0 等级