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

.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. 运行时组件\\t
    1. 64位的JIT编译器与SIMD指令\\t\t
    2. 垃圾回收器 \\t
    \\t
  2. 类库\\t
    1. 基础类库\\t\t
    2. NuGet包 \\t
    \\t
  3. 编译器\\t
    1. .NET编译器平台(Roslyn)\\t
    \

如何获取.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!\”);

\\

下一步计划

\\

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

\\

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

\\

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

\\
  1. .NET Core应用能够在基于Linux的生产环境中运行,包括Docker、本地部署和云端部署\\t
  2. 开发者可以使用VS Code或其它任何喜爱的编辑器,对运行在Mac OS X环境中的.NET代码进行编辑、编译与调试\\t
  3. 全部使用无关平台特性创建的应用在Windows与其它平台上具有相同的行为\\t
  4. .NET Core将把现有.NET云端生态系统的类库也带到Linux上\\t
  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 不可修改的map_Java中如何实现不可变Map详解

前言有时最好不允许修改 java.util.Map, 例如跨线程共享只读数据。为此,我们可以使用Unmodifiable Map或Immutable Map。在这个快速教程中,我们将看到它们之间的区别。然后,我们将介绍可以创建不可变Map的各种方法。下面话不多说…

《.NET最佳实践》与Ext JS/Touch的团队开发

概述持续集成编码规范测试小结概述 有不少开发人员都问过我,Ext JS/Touch是否支持团队开发?对于这个问题,我可以毫不犹豫的回答:支持。原因是在Sencha官网博客中客户示例中,有不少项目都是基于团队模式开发的。 那为什…

Cocos2d-x 3.2 学习笔记(四)学习打包Android平台APK!

从cocos2dx 3.2项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后,以后就会非常快捷! (涉及到3.1.1版本的,请自动对应3.2版本,3.x版本的环境搭建都是一样的) 一…

ceph操作相关命令整合

ceph基本操作: /etc/init.d/ceph -a start/stop //即在所有节点上执行 单个操作:     start/stop ceph-osd id{id}     start/stop ceph-mon id{hostname}     start/stop ceph-mds id{hostname} 集群监控:监控osd状态、monitor …

java 中violate_Java中的volatile关键字及Cache更新

Volatile [ˈvɑːlətl],中文解释:反复无常的,易变的,不稳定的。volatile的本意是告诉编译器,此变量的值是易变的,每次读写该变量的值时务必从该变量的内存地址中读取或写入,不能为了效率使用对…

mechanize (1)

最近看的关于网络爬虫和模拟登陆的资料,发现有这样一个包 mechanize [mekə.naɪz]又称为机械化的意思,确实文如其意,确实有自动化的意思。 mechanize.Browser and mechanize.UserAgentBase implement the interface of urllib2.OpenerDirect…

ubuntun安装ssh,并远程链接服务器操作

SSH是一种以安全、加密方式连接远程主机或服务器的方法。SSH服务器接受从有SSH的客户机的连接,允许操作者象在本地一样地登录系统。你可以用SSH从远程运行shell和X程序。 (1)安装SSH服务器 加入Universe和Multiverse源后,用新…

java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...

这段时间把支付基本搞完了,因为做的过程中遇到许多问题,特地记录下来,同时方便其他java coder,废话少说,下面开始。整体思路:在后台,根据参数创建支付宝客户端AlipayClient,发送参数…

Android 监控网络状态

Html代码public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity null) { Log.i("NetWorkS…

Tokyo Tyrant安装和配置

Tokyo Tyrant安装和配置Tokyo Cabinet是日本人开发的一款DBM数据库,读写速度非常快。Tokyo Tyrant也是由同一作者开发的Tokyo Cabinet网络接口,兼容memcached协议,也可以通过http协议进行数据交换。Tokyo Tyrant加上Tokyo Cabinet构成一款支持…

mysql 最值复杂查询_MySQL高级查询

我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查询实现。常见的高级查询包括多表连接查询、内连接查询、外连接查询与组合查询等,今天我们先来学习最常用、面试也很容易被问到的连接查询。我…

java事件类_关于Java事件类的一些思考

第一条是关于添加监听类时,如JButton button newJButton();button.addActionListener(this);如果进行两次注册监听类如再加一条button.addActionListener(this);那么当点击一次button时,button实际上会返回两次结果,相当于点击了两次button。…

java对象和json对象之间互相转换

2019独角兽企业重金招聘Python工程师标准>>> import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class MainClass { public static…

HDU 3397 线段树 双懒惰标记

这个是去年遗留历史问题,之前思路混乱,搞了好多发都是WA,就没做了 自从上次做了大白书上那个双重懒惰标记的题目,做这个就思路很清晰了 跟上次大白上那个差不多,这个也是有一个sets标记,代表这个区间全部置…

mysql接口可以重载吗_php 到底可不可以重载

展开全部php 作为一种弱类型语言,本身不能像强类型如java ,c那样,直接的实现重载。不过可e68a84e8a2ad62616964757a686964616f31333337393539以通过一些方法,间接的实现重载。使用一个统一的函数来实现重载。该方法要使用func_get…

SQL Server :理解数据记录结构

原文:SQL Server :理解数据记录结构在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下。 数据记录存储我们具体的数据,换句话说&#…

京东云擎提供了免费的wordpress一键安装功能了

1. 京东云擎(http://jae.jd.com)提供了免费的个人博客WordPress一键安装功能了,如下图,给开发者分享福利! 免费的应用,提供了源码,提供了数据库: 我之前把文章发到首页,遭到了封杀!本…

java 对象加密_java.security包实现对象加密

Java原生支持常见的加密算法,例如DES、RSA。随便写点关于Java安全包的东西。Java.security.Provider对象官方的解释是:实现了 Java 安全性的一部分或者全部。provider 可能实现的服务包括:算法(如 DSA、RSA、MD5 或 SHA-1),密钥的…

ajax请求模拟登录

前台 if (Session["username"] ! null){<div class"login"><span style"width:155px;height:85px;display:inline-block;margin-left:50px;margin-top:25px;text-align:center">(Session["username"]) 您好&#xff01;&…

Distinct源码分析

以前比较两个List数据&#xff0c;筛选出所需要的数据时候&#xff0c;一直套两层for循环来执行。用到去重(Distinct)的时候&#xff0c;这两个需求其实都是一样的&#xff0c;都是需要比较两个集合&#xff0c;查看了下它的源码&#xff0c;里面确实有值得借鉴的地方。 先附上…