Dot-Net
如何使用 Mono WebAssembly 在瀏覽器中執行簡單的 .NET 方法?
假設我在伺服器上有一個 .NET dll 文件,它有一個簡單的類:
public static class C { public static int Add(int a, int b) => a + b; }我想
C.Add使用 Mono 的 WebAssembly 支持在瀏覽器中呼叫。(假設我可以將 dll 下載到瀏覽器中,例如使用
fetch)問題:
- Mono 需要哪些 .js/.wasm 文件,我從哪裡獲得這些文件?
- 載入完所有內容後,我如何實際
C.Add從 JS 呼叫?我檢查了 npm,但在那裡沒有找到 Mono WASM。
注意:我已經有一個 dll,所以我對 WASM IL 解釋器感興趣,而不是 WASM AOT 建構。
這是我發現的。
獲取 Mono WASM
- 此處描述了這些步驟:docs/getting-started/obtain-wasm-sdk.md
- 簡短摘要:您必須從 Jenkins 下載並解壓縮建構
我們稱之為解壓文件夾
WASM-SDK。注意:如果按照 Mono 文件中的描述執行,則可以跳過以下步驟
packager.exe,但我想在此處描述手動方法以便更好地理解。準備 .NET dll
將以下 dll 放在您的站點根目錄下(假設在
managed文件夾下):
包含的主dll
class C,我們稱之為app.dllBCL 依賴項,在這種情況下您只需要:
WASM-SDK\wasm-bcl\wasm\mscorlib.dllWASM-SDK\wasm-bcl\wasm\Facades\netstandard.dllWASM-SDK\framework\WebAssembly.Bindings.dll準備 Web 文件
- 複製
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>
- 如果使用 IIS,請確保有擴展的
application/wasmmime 類型寄存器。.wasm全部做完
現在,一旦您打開 HTML,您應該
C.Add: 3會在瀏覽器控制台中看到已登錄。