And*_*kin 5 .net mono webassembly
假设我在服务器上有一个.NET dll文件,该文件具有以下简单类:
public static class C {
public static int Add(int a, int b) => a + b;
}
Run Code Online (Sandbox Code Playgroud)
我想C.Add使用Mono的WebAssembly支持在浏览器中调用。
(假设我可以将dll下载到浏览器中,例如使用fetch)
问题:
C.Add从JS 调用?我检查了npm,但在那里没有找到Mono WASM。
注意:我已经有一个dll,所以我对WASM IL解释器感兴趣,而不对WASM AOT构建感兴趣。
这是我发现的。
我们将其称为解压后的文件夹WASM-SDK。
注意:如果您packager.exe按照Mono文档中的描述运行,则可以跳过以下步骤,但是我想在此处描述手动方法,以便更好地理解。
将以下dll放在您的网站根目录下(在managed文件夹下说):
class C,我们称之为app.dllWASM-SDK\wasm-bcl\wasm\mscorlib.dllWASM-SDK\wasm-bcl\wasm\Facades\netstandard.dllWASM-SDK\framework\WebAssembly.Bindings.dllmono.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>
Run Code Online (Sandbox Code Playgroud)
application/wasm该.wasm扩展名有一个mime类型寄存器。现在,一旦打开HTML,您应该会C.Add: 3在浏览器控制台中看到登录信息。
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |