假设我在服务器上有一个.NET dll文件,该文件具有以下简单类:
public static class C {
public static int Add(int a, int b) => a + b;
}
我想使用Mono的WebAssembly支持在浏览器中调用C.Add
。
(假设我可以将dll下载到浏览器中,例如使用fetch
)
问题:
C.Add
?我检查了npm,但在那里没有找到Mono WASM。
注意:我已经有一个dll,所以我对WASM IL解释器感兴趣,而不对WASM AOT构建感兴趣。
答案 0 :(得分:4)
这就是我发现的东西。
我们将打开的文件夹称为WASM-SDK
。
注意:如果按照Mono文档中的描述运行packager.exe
,则可以跳过以下步骤,但是我想在此处描述手动方法,以便更好地理解。
将以下dll放在您的网站根目录下(让我们说managed
文件夹下):
class C
的主dll,我们称其为app.dll
WASM-SDK\wasm-bcl\wasm\mscorlib.dll
WASM-SDK\wasm-bcl\wasm\Facades\netstandard.dll
WASM-SDK\framework\WebAssembly.Bindings.dll
mono.js
复制mono.wasm
和WASM-SDK\release
Module
并导入mono.js
:<script>
window.Module = {};
window.Module.onRuntimeInitialized = () => {
const config = {
vfsPrefix: "managed",
deployPrefix: "managed",
enableDebugging: 0
};
const assemblies = [
'app.dll',
'mscorlib.dll',
'WebAssembly.Bindings.dll',
'netstandard.dll'
];
MONO.mono_load_runtime_and_bcl(
config.vfsPrefix,
config.deployPrefix,
config.enableDebugging,
assemblies,
() => {
Module.mono_bindings_init("[WebAssembly.Bindings]WebAssembly.Runtime");
const add = Module.mono_bind_static_method("[app] C:Add");
// ⬇️ This is what calls C.Add():
console.log('C.Add:', add(1, 2));
}
)
};
<script>
<script async src="mono.js"></script>
application/wasm
扩展名有一个.wasm
哑剧类型寄存器。现在,一旦打开HTML,您应该会在浏览器控制台中看到C.Add: 3
登录。