You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Blazor WASM中的Module对象在升级到.NET 8+后未定义的问题求助

.NET 6 Blazor WASM中的Module对象在升级到.NET 8+后未定义的问题求助

我有一个在.NET 6中正常运行的项目,它会调用以下JS代码:

export function synchronizeFileWithIndexedDb(filename) {
    return new Promise((res, rej) => {
        const db = window.indexedDB.open('SqliteStorage', 1);
        db.onupgradeneeded = () => {
            db.result.createObjectStore('Files', { keypath: 'id' });
        };

        db.onsuccess = () => {
            const req = db.result.transaction('Files', 'readonly').objectStore('Files').get('file');
            req.onsuccess = () => {
                Module.FS_createDataFile('/', filename, req.result, true, true, true);
                res();
            };
        };
    });
}

在OnInitializedAsync中的后台逻辑是这样的:

if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("browser")))
{
  // create SQLite database file in browser
  var module = await _js.InvokeAsync<IJSObjectReference>("import", "./dbstorage.js");
  await module.InvokeVoidAsync("synchronizeFileWithIndexedDb", SqliteDbFilename);
}

这段代码在.NET 6中运行完美,但可惜.NET 6已经停止支持了。

直接升级到.NET 8后,代码里第11行的Module就变成未定义的了。我在全新的.NET 9项目里也遇到了同样的问题——.NET 6能正常运行,.NET 8及以上版本就会报错。

这是已知问题吗?现在我对升级任何涉及JS互操作的内容都有点怕了😅

有没有解决办法?我根据微软文档尝试把Module改成DotNet,但没用。除非万不得已,我真不想退回到.NET 6来解决这个问题😉

你可以通过升级一个现有的SQLite WASM项目来复现这个问题。

备注:内容来源于stack exchange,提问作者Auri Rahimzadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:19:32