Blazor Chrome缓存问题

8

我有一个 Blazor SPA,已经发布到一个 Webhotel 上的 IIS。我的问题是 Chrome 会缓存我的 Blazor 程序集,无论我如何重新部署,我仍然得到旧的 DLL。我可以通过启动一个新的干净的 Chrome 并使用 chrome --disable-application-cache --incognito 命令来获取最新的 DLL,但我应该如何正确地解决这个问题呢?

4个回答

12

如果您不需要PWA功能,则以下方法有助于解决问题。

我开始使用PWA(以防以后需要),但实际上在简单浏览时就会导致此问题。试图向service-worker.published.js添加注释或版本控制,但这并没有帮助。我正在使用Blazor版本3.2.1。

通过使用PWA,在浏览器中检查缓存时,我确实看到了最新的service-worker.published.js出现,并且新的离线缓存也已被下载。但是由于某种我无法理解的原因,浏览器仍在使用较旧的缓存。

enter image description here

要删除PWA:

  1. 从wwwroot中删除以下文件:
/wwwroot/manifest.json
/wwwroot/service-worker.js
/wwwroot/service-worker.published.js
  1. 从 /wwwroot/index.html 中删除此行
<script>navigator.serviceWorker.register('service-worker.js');</script>
从你的csproj文件中删除这些行。
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
<ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js" />

谢谢Waleed。有趣的是我不再遇到同样的问题了,而且我甚至已经升级到Blazor 3.2.1了。 - Martin Michaelsen
也许你一开始就没有在这个项目中启用 PWA? - Waleed Al Harthi
感谢您提供移除PWA的步骤。 - Paul
这个操作移除了PWA,但并没有解决缓存问题。 - Adel Mourad

1
缓存问题非常奇怪。我也遇到了很多解决困难,看起来可以解决的方法是在Chrome中将其安装为应用程序,当它加载旧缓存时。我可以强制完全刷新,但只要我进行新的常规刷新,它就会返回旧的DLL缓存。但是,在Chrome中将其安装为应用程序后,在该应用程序内部,我可以卸载它,并且还有从Chrome中删除它的选项。然后它终于开始加载我的新版本应用程序......在那里我已经按照Waleed Al Harthi的建议删除了PWA,并避免了这个问题。

0

就像你平常做的一样。但当然还有其他方法。

  1. 在浏览器中按下 F12 -> 选择网络 -> 勾选禁用缓存
  2. 在浏览器中按下 F12 -> 在开发者模式下 右键单击 重新加载 -> 选择硬重载
  3. 按下 ctrl+shift+R 进行硬重载
  4. 你自己的方式,但可以为其创建一个快捷方式。
  5. 使用代码禁用缓存(不建议这样做,我需要查找如何操作)

1
OP想要向他SPA的每个访问者展示新版本。每个访问者都不应该必须硬重载才能看到新版本。 - Jinjinov

0

将其作为PWA启用

然后,您可以通过项目中的属性来控制缓存。客户端将缓存您的代码,直到您告诉它更新 - 用户将被告知有更新并应重新加载页面 - 此时它将进行更新。


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