码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 在 WASI 上运行 .NET 7 应用程序


    WASI代表 WebAssembly 系统接口,WASI 让沙盒化的 WebAssembly 应用程序通过一系列类似 POSIX 的函数访问底层操作系统,允许独立于浏览器运行 WebAssembly 代码。这是一个高度实验性的项目,但同时也是一个非常有趣的项目,并且有可能为行业的大规模编程范式转变做出贡献,使 WebAssembly 真正无处不在。

    微软的 Steve Sanderson 最近发布了.NET 的实验性WASI SDK for .NET的第一个版本,它允许将 .NET 7 和 ASP.NET Core 应用程序 构建为独立的 WASI 兼容应用程序,并从 WASI 主机运行它们。Steve 的 repo 提供了在 Windows 和 Linux 上使用的简单步骤.

    我们首先要安装 .NET 7 SDK。最新的是预览7.0.100-preview.2并不能运行, Steve 提交了有个PR https://github.com/dotnet/aspnetcore/pull/40376 需要 7.0.100-preview.4以上版本修复,运行时方面的相关 PR 可以在https://github.com/dotnet/runtime/pull/67036 找到 ,考虑到所有因素,因为它已经修复,只是不是“正式可用”,所以最好的办法是从每日构建版本https://github.com/dotnet/installer/blob/main/README.md#installers-and-binaries 安装适用于对应操作系统的SDK,比如Windows的最新稳定版本是 https://aka.ms/dotnet/7.0.1xx/daily/dotnet-sdk-win-x64.exe,例如,我今天安装的当前可用版本是7.0.100-preview.4.22201.11。

    我们创建一个常规的基本 ASP.NET Core Web 应用程序。

    dotnet new web

    项目创建后,需要添加以下包引用才能引入实验 Wasi.Sdk以及 Steve 构建的相应 ASP.NET Core 服务器实现:

    <ItemGroup>
        <PackageReference Include="Wasi.AspNetCore.Server.Native" Version="0.1.0" />
        <PackageReference Include="Wasi.Sdk" Version="0.1.0" />
      </ItemGroup>

    除此之外,main PropertyGroup 下的一个额外属性 ,一个与您的应用程序使用的端口 在launchSettings.json 相对应的端口:

    <WasiRunnerArgs>--tcplisten localhost:5100 --env ASPNETCORE_URLS=http://localhost:5100</WasiRunnerArgs>

    由于我们的应用程序需要从 WASI 主机内部侦听网络接口,因此需要在生成的代码中进行额外的更改,即需要添加WasiConnectionListener() 到默认值WebApplication 构建者:

    var builder = WebApplication.CreateBuilder(args).UseWasiConnectionListener();

    此时应用程序将正确构建,但它还无法运行,因为我们还需要有 WASI 主机可供我们使用。

    为了运行这个基于 WASI 的应用程序,我们需要一个 WASI 运行时。一个优秀的轻量级运行时是wasmtime,它恰好是这个实验使用的那个Wasi.Sdk ,我们需要 它在 PATH 上可用。

    image

    我们应该能够运行应用程序:

    image

    打开浏览器访问 http://localhost:5100/ ,我们现在应该在其中看到我们的 hello world。 以一种非常壮观的方式,我们现在有一个在 WASI 运行时中作为 WebAssembly 应用程序运行的ASP.NET Core应用程序 ,并且可以从浏览器访问。

    image

  • 相关阅读:
    Dockerfile 修改文件角色容量变大
    linux下程序分析工具总结
    shell 脚本语句
    【Shell脚本6】Shell 运算符
    第7章 【MySQL】B+树索引的使用
    百度超级链BaaS服务平台调研
    马斯克要求推特工程师默写代码,开始着手整顿美国职场?
    RPA和传统自动化的区别?
    [附源码]Python计算机毕业设计Django的黄河文化科普网站
    MindSpore论文解读 | EPRNet:应用于实时街景分割的高效金字塔表征网络
  • 原文地址:https://www.cnblogs.com/shanyou/p/16098911.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号