.NET 应用程序支持直接调用 WebAssembly 模块

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 应用程序支持直接调用 WebAssembly 模块相关的知识,希望对你有一定的参考价值。

WebAssembly Runtime 现已添加 .NET Core API,开发者可直接在 .NET 应用程序中调用 WebAssembly 模块。

Mozilla 宣布由 Bytecode Alliance 创建的 Wasmtime(WebAssembly runtime)现已添加处于早期预览版状态的 .NET Core API,这就意味着开发者可以直接在 .NET 应用程序中调用 WebAssembly 代码。

Bytecode Alliance(字节码联盟)是由 Mozilla、Fastly、Intel 与 Red Hat 联合成立的组织,该联盟旨在通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。Mozilla 提到,.NET Core 作为一个跨平台的 Runtime,仍提供对 WebAssembly 的支持主要三个好处,除了可跨平台共享更多代码之外,还能安全地隔离不受信任的代码,同时凭借着 WebAssembly 的接口类型(WebAssembly Interface Types),WebAssembly 和 .NET 可相互传递复杂类型。

虽然我们能够使用 .NET Core 构建跨平台应用,但如果要使用诸如 C 或是 Rust 等原生函数库,这仍然是十分不方便的操作,因为需要函数库为每个平台发布特定函数库版本。不过有了 WebAssembly 之后,我们可以将其作为桥梁以简单满足上面的需求。原生函数库可以先编译成 WebAssembly,然后包括 .NET Core 在内的许多平台就能使用这些 WebAssembly 模块,这将简化函数库的发布以及应用程序对这些函数库的依赖方式。

由于 WebAssembly 是面向网页设计的,网页是一种每次访问网站(读/写数据)都会执行不受信任代码的环境,WebAssembly 模块只能调用从主机环境明确输入的外部函数,而且只能在主机分配的内存区域进行读写数据,这种沙盒设计方式也能被应用在 .NET Core 中,以增加安全性。通过支持 WebAssembly,.NET Core 也能使用沙盒以执行不信任代码。

另外,Bytecode Alliance 力推的 WebAssembly 接口类型增加了 WebAssembly 与其他语言的互通性,.NET Core 也能从中受益。Mozilla 表示,WebAssembly 接口类型简化了应用程序与 WebAssembly 模块间来回传递复杂类型所需的“胶水代码”。当 Wasmtime 的 .NET API 最终可以对接口类型进行操作,WebAssembly 和 .NET 之间就能够无缝地传递复杂类型。

最后,Wasmtime 新增加的这个 .NET Core API 尚处于预览阶段,Bytecode Alliance 成员仍在对其积极开发中,更新将不保证向后兼容。当前目标是让 Wasmtime 更为稳定,因此不建议开发者将 Wasmtime 的 .NET Core API 用于正式产品开发。

原文链接:https://www.oschina.net/news/111967/using-webassembly-from-dotnet-with-wasmtime


以上是关于.NET 应用程序支持直接调用 WebAssembly 模块的主要内容,如果未能解决你的问题,请参考以下文章

.NET 应用程序支持直接调用 WebAssembly 模块

.net core EF Core 视图的应用

ASP.NET如何调用标签打印机

通过 C# .NET 应用程序调用时无法识别命令,但直接调用时有效

aardio + .NET 快速开发独立 EXE 程序,可防 ILSpy 反编译

vb.net把dll放到程序的Resources资源里面,能直接调用Resources里面的dll吗?