C# (.NET) 获得新平台:开发者迎来哪些变化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 现已支持新平台:关键变化与前景展望



微软持续积极拓展 .NET 生态系统的边界。在最新更新中,开发团队宣布为 C# 语言新增了对新平台的支持。这一决定为程序员打开了创建现代应用程序的更多可能性,不再局限于传统的运行环境。



这里所说的新平台是 WebAssembly System Interface (WASI)。此前 .NET 已支持浏览器中的 WebAssembly,但现在 .NET 8+ 运行时允许在浏览器之外——服务器、边缘设备和云环境中通过 WASI 运行 C# 代码。这是迈向真正跨平台的一步,同一份代码可以在 Windows、Linux、macOS 甚至隔离的沙盒环境中运行。



这对开发者意味着什么?



.NET 对 WASI 的支持不仅仅是一项技术创新。它解决了几个根本性问题:



  • 通用性:现在 C# 应用程序可以在以前需要 Python、Rust 或 Go 的环境中运行——例如云函数(serverless)或物联网设备。
  • 安全性:WASI 提供严格的隔离(沙盒),这对于多用户服务和执行未经审核的代码至关重要。
  • 性能:得益于 .NET 8 中的原生 AOT 编译器(Ahead-of-Time),基于 WASI 的 C# 应用程序几乎可以瞬间启动,无需 JIT 编译延迟。


实际如何运作?



微软发布了 dotnet wasi-experimental 的预览版——一个允许将 C# 项目编译为 WASI 模块的包。过程很简单:

  • 只需安装 .NET 8 SDK 并添加 NuGet 包 Wasi.Sdk。
  • 编写常规的 C# 代码(例如控制台应用程序)。
  • 使用 --wasi 标志构建项目——输出将是一个 .wasm 文件。
  • 在任何支持 WASI 的环境中运行它(例如 Wasmtime 或 Wasmer)。


需要注意的是,现阶段支持并不完整:某些功能,如多线程和直接文件系统访问,目前仍有限制。但对于服务器场景、微服务和计算任务来说,这已经足够了。



与 Python 和 Rust 的竞争



长期以来,Python 和 Rust 在需要可移植性和安全性的场景(例如 WebAssembly)中占据主导地位。支持 WASI 的 C# 凭借丰富的标准库和熟悉的语法进入这一领域。对于已经使用 .NET 的团队来说,这意味着降低了入门门槛:无需学习新语言即可在边缘平台上部署应用程序。



此外,微软正在与推动 WASI 标准的 Bytecode Alliance 项目积极合作。这确保了 .NET 将与未来版本的规范保持兼容。



下一步是什么?



.NET 对 WASI 的支持目前仍是一项实验性功能,但预计在 .NET 9 中会趋于稳定并扩展 API。开发者现在就应该开始测试,以便在正式发布时做好迁移准备。



对于习惯使用 Python 的人来说,这或许是一个将 C# 视为替代方案的契机。

推荐库