写点什么

在 Linux 和 Mac OS X 系统上运行.NET

  • 2015-05-06
  • 本文字数:1951 字

    阅读完需:约 6 分钟

.NET Core 运行时已经看到了实现真正的跨平台的美好前景,它最终出现在 Linux 和 Mac OS X 平台上。在上周举办的 Microsoft Build 大会上,来自微软的项目经理 Habib Heydarian 为听众分析了这一举措对开发者们所带来的益处,并告诉开发者们如何开始探索这些新的机会。在名为“让.NET 实现跨平台”的一场讲座中,Heydarian 首先介绍了开发者如何进行一次全新的.NET Core 安装。

首先,所有的.NET 代码都包含在一个单独的文件夹中,而无需将它安装在某个系统级别的位置。这样,只要愿意,每个.NET 应用都可以使用一个完全不同的编译版本。并且在Windows 系统上进行编译的代码也能够在Mac OS X 和Linux 系统上运行。

要在以上系统中运行一个基于命令行的标准HelloWorld 程序,可使用以下方式:

./corerun HelloWorld.exe

// corereun 是一个原生的运行 app 的环境

// 在 Windows 上,引导.NET 应用的功能已经内建于操作系统中了

在非 Windows 平台上使用.NET,就意味着开发者们能够使用 ASP.NET 5、CoreCLR,并且从以下共享的功能中受益了:

  1. 运行时组件
  2. 64 位的 JIT 编译器与 SIMD 指令
  3. 垃圾回收器
  4. 类库
  5. 基础类库
  6. NuGet 包
  7. 编译器
  8. .NET 编译器平台(Roslyn)

如何获取.NET Core

对于 Mac OS X 开发者来说,推荐的方式是使用 Homebrew 以获取必要的组件。当安装好 Homebrew 之后,就可以通过以下命令获取.NET 组件了:

brew tap aspnet/dnx
brew update
brew install dnvm
dnx . kestrel

Linux 用户可以从该项目的网站上下载一个包含了所有必要组件的 TAR 文件,随后按照以下方式进行安装:

tar zxvf PartsUnlimited-demo-app-linux.tar.gz -C ~/
source ~/.dnx/dnvm/dnvm.sh
dnvm use 1.0.0-beta5-11624 -r coreclr -arch x64
dnx . kestrel

你一定注意到了一点,在这个两个平台上所运行的最后一条指令都是 kestrel 的执行。Kestrel 也正是“跨平台的 ASP.NET 5 web 服务器”,DNVM 则是.NET 的版本管理器。目前,该项目只支持 64 位平台的 Linux 和 Mac OS X。开发团队仍然在继续研究如何让它支持 32 位的系统。

紧随 Linux 和 Mac OS X 之后,对FreeBSD 的支持最近也加入到该项目中。对于这三个平台来说,目前还存在着一个限制,那就是从源代码编译.NET Core 的功能仅限于Windows 版本。要从源代码编译.NET,开发者需要首先编译CoreCLR,然后再编译CoreFX。

正如Windows 平台上的.NET 开发者能够利用平台调用(PInvoke)功能一样,Linux 平台上的开发者也能够使用DLL Import 这一命令:

[DllImport(“libc”)]
private static extern int printf(string format);

Printf(“Hello, //BUILD 2015!\n”);

下一步计划

Heydarian 在演讲余下的部分谈到了该团队下一步的计划,以及微软对这一项目的目标。随着 Visual Studio 不断地扩展到非 Windows 的平台上,微软希望能够改进在这些新环境中的调试功能。对于 VS2015 来说,就是要实现远程调试。而对于 VS Code 来说,首先要从实现本地调试开始。

另一个改进的方向是整体的上线预备。为了在这方面有所突破,团队打算整合 MSBuild 的支持,并消除目前对 Mono 在这方面功能的依赖。

Heydarian 表示,当.NET 在 Linux 和 Mac OS X 平台上正式发布,并成为“RTM”版本之后,微软将做出以下正式的承诺:

  1. .NET Core 应用能够在基于 Linux 的生产环境中运行,包括 Docker、本地部署和云端部署
  2. 开发者可以使用 VS Code 或其它任何喜爱的编辑器,对运行在 Mac OS X 环境中的.NET 代码进行编辑、编译与调试
  3. 全部使用无关平台特性创建的应用在 Windows 与其它平台上具有相同的行为
  4. .NET Core 将把现有.NET 云端生态系统的类库也带到 Linux 上
  5. 微软对.NET 在 Linux 上的支持、服务和维护与其它微软产品一视同仁

在你的应用中加入对 Linux 和 Mac OS X 的支持

微软将推出一套 API 可移植性工具,用于对现有的代码进行分析,找出所需的程序集和目标平台。目前为止,唯一对兼容性进行了测试的 Linux 分发平台是 Ubuntu 14.04.2 LTS。虽然没有明确地表示不支持其它的 Linux 分发平台,但无法保证在这些平台上是否能够正常运行。

Heydarian 认为目前来看,微软所提供的.NET 与 Mono 版本相比,所针对的市场方向并不相同。Haydarian 表示:“……虽然 [Mono] 在移动场合的表现优秀,但它并不是为服务器或云端生产环境的使用场景而设计的……”,而.NET Core 倾向于在具有高吞吐量、高伸缩性,以及更高的修复前平均时间(MTTF)的服务器环境中所使用。

希望通过.NET 即将提供的功能,从跨平台方式中受益的开发者可以首先从 VS2015RC 中的 ASP.NET 5 项目模板开始打造及测试应用,并且参考 GitHub 上的 ASP.NET 示例应用 Parts Unlimited 。凡是能够在 Windows 上的 ASP.NET 5 中成功运行的应用,一旦等到.NET Core RTM 之后,就能够无缝地迁移至 Linux 平台上。

查看英文原文: Running .NET on Linux and Mac OS X

2015-05-06 09:237204
用户头像

发布了 428 篇内容, 共 198.4 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

学生管理系统详细架构设计文档

晨亮

「架构实战营」

IntelliJ IDEA 在校验 PHP Debug 配置的时候提示 Xdebug 扩展没有载入

HoneyMoose

如果写作平台不叫写作平台,他应该叫……?

InfoQ写作社区官方

写作平台 创意 话题讨论 热门活动

外包学生管理系统架构设计文档

五月雨

架构实战营 「架构实战营」

你才二十几岁呀,怎么眼里没有光了呢?

架构精进之路

随笔 日常感悟 2月日更

IntelliJ IDEA Ultimate 配置 PHP 拦截器

HoneyMoose

java面试jvm调优的意义_java培训

@零度

JVM JAVA开发

linux服务器是什么?如何快捷安全管理?

行云管家

运维 服务器

开发运维效率提升 80%,计算成本下降 50%,分众传媒的 Serverless 实践

阿里巴巴云原生

阿里云 Serverless 云原生 合作案例

基于CC2530设计的自动晾衣杆

DS小龙哥

2月月更

尚硅谷MyBatis新版视频教程发布

@零度

Java mybatis

一句话告诉您什么是运维?以及如何运维才能事半功倍?

行云管家

运维 IT运维 自动化运维

前后端分离项目,如何解决跨域问题?

沉默王二

Java 前端 后端 跨域

如何在 Vue 中导出数据至 Excel 表格 - 卡拉云

蒋川

Vue Vue 3 vue admin

阿里巴巴的Java开发手册(黄山版)来了

Geek_rze78a

Java 阿里巴巴面经总结

灵雀云加入,龙蜥社区迎来国内领先的企业级PaaS服务商

OpenAnolis小助手

Linux 开源 云原生 PaaS

IntelliJ IDEA Ultimate 配置 PHP 拦截器中 Xdebug 扩展应该怎么填

HoneyMoose

IntelliJ IDEA 在校验 PHP Debug 配置的时候提示 URL 无法访问

HoneyMoose

架构学习【03】——外包学生管理系统的架构文档

tiger

架构实战营

uni-app技术分享| uni-app常见问题(一)

anyRTC开发者

uni-app 音视频 WebRTC 移动开发 实时通讯

亚信科技AntDB数据库参与“国内首款”事务型性能测试工具开源发布会,树立金融技术风向标

亚信AntDB数据库

AntDB 性能基准测试 中国信通院

重新理解“无容灾不上云”:应用多活将成为云原生容灾新趋势

阿里巴巴云原生

阿里云 开源 云原生

web前端开发nodejs基本原理_前端培训

@零度

node.js 前端开发

ShardingSphere 助力当当 WMS:订单效率提升 30%、节约成本上千万

SphereEx

数据库 开源 ShardingSphere wms SphereEx

RadonDB MySQL on K8s 2.1.2 发布!

RadonDB

MySQL 数据库 高可用 RadonDB KubeSphere

数据平台与Flink任务运行原理介绍

云智慧AIOps社区

redis 云计算 大数据 kafka Flink 平台

Khronos 会议干货 | WebGPU 1.0 即将发布

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

大数据开发join的运行原理_大数据培训

@零度

hive 大数据开发

fastposter 2.5.0 全新发布 一款电商级海报生成器

物有本末

Java Python 海报 海报生成器

绿色数据中心“东数西算”全面启动!八大枢纽十大集群 - 涉及高性能计算,数据集群,水冷散热

GPU算力

RocketMQ-Streams 首个版本发布,轻量级计算的新选择

阿里巴巴云原生

在Linux和Mac OS X系统上运行.NET_.NET_Jeff Martin_InfoQ精选文章