【问题标题】:Blazor WASM - Error: Failed to start platform - error sometimes shows once after deployBlazor WASM - 错误:无法启动平台 - 部署后有时会显示一次错误
【发布时间】:2021-06-09 13:11:39
【问题描述】:

我有一个主要工作的 Blazor WASM 应用程序。但是,通常在部署新版本之后,有时很少会无故加载失败。

刷新页面使错误消失,页面大部分工作,直到部署下一个版本。

我从 web 控制台得到了这个结果:

我不确定是什么导致了这个问题,似乎是某种缓存问题,但我无法查明,也无法解决。

【问题讨论】:

  • 我有同样的问题,但只有当我通过 IIS 服务器运行它时,如果我从解决方案的服务器项目运行它,它就可以工作。我正在看这个,如果你找到了解决方案,请告诉我。我还在使用 VS 2022 Preview 运行 .NET 6 preview 5。
  • 不幸的是,我不确定我的哪些解决方案适用于我的许多 blazor 部署问题中的哪一个......当我转向托管 .Net Core 而不是独立的时,一些错误消失了,还有一些是由 service-worker.js 中的错误引起的
  • @IIARROWS,我不确定 SO 是否会通知用户新的答案,我只是想让你知道,我终于设法永久摆脱了完整性错误。

标签: blazor blazor-webassembly


【解决方案1】:

通过添加一点蛮力方法,我设法解决了我的部署后完整性错误。这可能不是最好的解决方案,但适用于我的情况。

首先,在 service.worker.js 中,我将文件 index.html 标记为不被缓存:

const offlineAssetsExclude = [/^service-worker\.js$/, /^index\.html$/];

然后我将 service-worker-assets.js 包含到加载的脚本中。我需要它来访问每次构建时自动生成的assetsManifest.version。然后我将它与保存在 localstorage 中的版本进行比较,清除所有应用程序缓存,将新版本保存到 localstorage 并强制重新加载。

请注意,这种方法将在检测到新版本时强制下载完整的应用程序,从而避免完整性错误,但代价是可能会重新下载不需要的文件。

<script src="service-worker-assets.js?s=v1.12"></script>
<script>
    if (localStorage.getItem('currentVersion') != self.assetsManifest.version) {
        window.caches.keys().then(function (keyList) {
            keyList.forEach(key => window.caches.delete(key));
        });
        localStorage.setItem('currentVersion', self.assetsManifest.version)
        document.location.reload(true);
    }
</script>

另请注意,资产列表文件中添加了 ?s=v1.12 后缀。该值必须在每次部署期间递增。它确保浏览器不会缓存旧文件,并且我们拥有最新版本。

由于我是个偏执狂,我为许多其他我不想在部署后保持缓存的文件添加了相同的后缀

<link href="Project.Client.styles.css?s=v1.12" rel="stylesheet" />
...
<script src="javascript/site.js?s=v1.12"></script>
<script src="_framework/blazor.webassembly.js?s=v1.12"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2021-11-06
    • 2021-09-10
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多