在 .NET 7上使用 WASM 和 WASI

net,使用,wasm,wasi · 浏览次数 : 2633

小编点评

**WASM** 是一个基于堆栈的虚拟机的二进制指令格式。它是一种编程语言的可移植编译目标,具有紧凑的二进制格式,运行接近本机的性能,并提供 C#、C/C++ 和 Rust 等语言。 **WASI** 是一个标准,它定义了 WASM 模块如何与主机环境交互的接口。它提供以下 API: * `Load`: 用于加载 WASM 模块。 * `Entry`: 用于运行 WASM 模块。 * `Exit`: 用于关闭 WASM 模块。 * `MessageFilter`: 用于接收来自主机环境的消息。 * `Memory`: 用于访问 WASM 模块的内存。 通过使用 WASI,.NET 开发人员可以将 WASM 模块与浏览器世界交互。

正文

WebAssembly(WASM)和WebAssembly System Interface(WASI)为开发人员开辟了新的世界。.NET 开发人员在 Blazor WebAssembly 发布时熟悉了 WASM。Blazor WebAssembly 在浏览器中基于 WebAssembly 的 .NET 运行时上运行客户端。WASI通过提供一个系统接口来在Web之外运行WebAssembly,从而将WASM带出浏览器世界。它是 WASM 模块如何与主机环境交互的标准。

什么是WASM?

WebAssembly(WASM)是基于堆栈的虚拟机二进制指令格式。WASM 是编程语言的可移植编译目标。它是一种低级汇编语言,具有紧凑的二进制格式,运行接近本机的性能,并提供 C#、C/C++ 和 Rust 等语言。具有可在浏览器和其他环境中运行的编译目标。

什么是WASI?

WebAssembly 系统接口 (WASI) 是 WASM 模块如何与主机环境交互的标准。WASI是WebAssembly系统接口的规范。它是一组 API,WebAssembly 模块可以调用这些 API 来访问主机环境。
由于 WASI 是在浏览器之外安全地运行 WASM,因此它无法利用嵌入到我们现代 Web 浏览器中的运行时。它需要另一个运行时。这就是为什么像WasmtimeWasmerWasmEdge这样的运行时存在的原因。Wasmtime是WebAssembly的独立JIT风格的运行时。它被设计为作为独立的命令行实用程序运行,嵌入到其他应用程序中,或用于在更大的运行时中运行WebAssembly模块。

.NET 7 WASI SDK

被称为 ASP.NET Core Blazor WebAssembly 之父的 Steve Sanderson,他在年初几个月前打开了 GitHub 存储库SteveSandersonMS/dotnet-wasi-sdk。 “Experimental WASI SDK for .NET Core” 就这么诞生了。几周前,这个仓库被转移到 dotnet/dotnet-wasi-sdk。这是否暗示它已准备好进入下一步? 我深信不疑,我们会在 2022 年 .NET 大会期间会听到Steve Sanderson 聊这一点。

2022.11.8  09:30 - 10:00 PST

.NET 7 中 Blazor 的新增功能

Steve Sanderson

.NET 7 中的 Blazor 增加了许多新的改进,使构建漂亮的交互式 Web UI 更轻松、更高效。在本次会议中,我们将介绍对自定义元素的新支持、改进的数据绑定、处理位置更改事件、显示加载进度、动态身份验证请求等!

如何使用 WASI SDK for .NET 构建 .NET 7 Web Api,具体参考 “如何使用:ASP.NET 核心应用程序” ,创建一个 .NET 7 Web API 项目,然后添加适用于 .NET 的 WASI SDK。

与在 .NET 7上使用 WASM 和 WASI相似的内容:

在 .NET 7上使用 WASM 和 WASI

WebAssembly(WASM)和WebAssembly System Interface(WASI)为开发人员开辟了新的世界。.NET 开发人员在 Blazor WebAssembly 发布时熟悉了 WASM。Blazor WebAssembly 在浏览器中基于 WebAssembly 的 .N

.NET开源免费功能最全的商城项目

前言 今天给大家推荐一个功能丰富、免费、灵活且可定制的开源电子商务解决方案:nopCommerce。大家假如有商城需求可以直接使用该项目进行二次开发,省时省力。 项目介绍 nopCommerce在.NET 7上运行,并使用MS SQL 2012(或更高版本)后端数据库。 nopCommerce是跨平

【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)

问题描述 在上一篇博文(【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (一):https://www.cnblogs.com/lulight/p/17061631.html)中,介绍了第一种分片的方式上传文件。 本文章接着介绍第二种方式,使用 M

C#11之原始字符串

最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串。 在使用C#11的原始字符串时,发现的一些有意思的东西,超出了我原本对它的期待,话不多说,我们一起来看看。 多年的困扰 我不知道大家有没有写过这样的代码

.NET 7 的 AOT 到底能不能扛反编译?

一:背景 1.讲故事 在B站,公众号上发了一篇 AOT 的文章后,没想到反响还是挺大的,都称赞这个东西能抗反编译,可以让破解难度极大提高,可能有很多朋友对逆向不了解,以为用 ILSpy,Reflector,DnSpy 这些工具打不开就觉得很安全,其实不然,在 OllyDbg,IDA,WinDBG 这

.NET周报【11月第4期 2022-11-30】

国内文章 .NET 7 的 AOT 到底能不能扛反编译? https://www.cnblogs.com/huangxincheng/p/16917197.html 在B站,公众号上发了一篇 AOT 的文章后,没想到反响还是挺大的,都称赞这个东西能抗反编译,可以让破解难度极大提高,可能有很多朋友对逆

在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别

一、简介 很长时间没有关注一些C#技术细节了,主要在研究微服务、容器、云原生、容器编排等高大上的主题了,最近在写一些框架的时候,遇到了一些和在 Net Framework 框架下不一样的情况,当然了,我今天主要测试的是,在通过【添加项目引用】和【手动拷贝DLL】的情况下,这三个方法加载程序集:Ass

试试将.NET7编译为WASM并在Docker上运行

之前有听到说Docker支持Wasmtime了,刚好.NET7也支持WASM,就带大家来了解一下这个东西,顺便试试它怎么样。 因为WASM(WebAssembly) 一开始是一个给浏览器的技术,比起JS解释执行,WASM能用于提升浏览器的用户体验,因为在一些场景中它有着比JS更好的性能。 大家可以将

统一的开发平台.NET 7正式发布

在 2020 年规划的.NET 5功能终于在.NET 7 完成了,为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕,未来只有一个.NET, 回顾.NET 20年,从.NET Framework –> .NET Core –>.NET 一个产品命名可以反映出.NET的发展脉络,从封闭走向开放

.NET周报【11月第2期 2022-11-15】

国内文章 统一的开发平台.NET 7正式发布 https://www.cnblogs.com/shanyou/archive/2022/11/09/16871945.html 在 2020 年规划的.NET 5功能终于在.NET 7 完成了,为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕