在Mac上用自己编译出的DNX运行.NET程序

DNX的全称是.NET Execution Enviroment(.NET执行环境),它是.NET跨平台的一个重要角色。如果你关注.NET的跨平台,一定要关注DNX

由于Mono 4.0的一个bug(现已修复),目前如果要在Mac上编译dnx,需要先签出Mono的源代码进行编译,详见 Bug 29499 - System.IO.EndOfStreamException when running dnx command 。

在Mac OS X编译Mono的方法可以参考 Compiling Mono on Mac OS X 。用到的命令如下:

brew install autoconf automake libtool pkg-config
git clone https://github.com/mono/mono.git
cd mono
./autogen.sh --prefix=/usr/local --disable-nls
make
make install

编译好Mono之后(编译是一个漫长的过程),需要修改dnx中的packages/KoreBuild/build/_kpm-build.shade文件(如果没有这个文件,需要先运行一下./build.sh)

exec program=‘cmd‘ commandline=‘/C kpm pack${pack_options} ${projectFolder} --configuration ${configuration}‘ if=‘!IsMono‘
exec program=‘kpm‘ commandline=‘pack${pack_options} ${projectFolder} --configuration ${configuration}‘ if=‘IsMono‘

将其中的kpm改为dnu(不然编译时会报“找不到kpm”的错误,都是改名惹的祸):

exec program=‘cmd‘ commandline=‘/C dnu build${build_options} ${projectFolder} --configuration ${configuration}‘ if=‘!IsMono‘
exec program=‘dnu‘ commandline=‘build${build_options} ${projectFolder} --configuration ${configuration}‘ if=‘IsMono‘

然后运行./build.sh命令就可以成功编译dnx。

编译出来的东东都在artifacts/build文件夹中。其中有2个重要的文件夹:dnx-mono与dnx-coreclr-darwin-x64,前者是基于Mono的dnx,后者是基于CoreCLR的dnx,通过dnvm安装的dnx就是这个。它们包含了执行一个.NET程序所需要的一切,它们就是.NET Execution Enviroment(.NET执行环境)。

不信,我们可以用一个非常简单的.NET程序测试一下。

这个.NET测试程序叫HelloDnx,只有2个文件:

1)Program.cs

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello from DNX!");
    }
}

2)project.json

{
    "dependencies":{
    },
    "frameworks":{
        "dnx451":{},
        "dnxcore50":{}
    }
}

我们用自己编译的dnx运行这个HelloDnx试试。

首先删除以前通过dnvm安装的dnx。

cd ~/.dnx/runtimes
rm -rf *

然后用我们自己编译出的dnx中的dnu命令恢复nuget包包:

/Git/dotnet/dnx/artifacts/build/dnx-mono/bin/dnu restore
Microsoft .NET Development Utility v1.0.0-t150525235008

Restoring packages for /Git/dotnet/HelloDnx/project.json
Writing lock file /Git/dotnet/HelloDnx/project.lock.json
Restore complete, 159ms elapsed

接着用我们自己编译出来的dnx运行这个HelloDnx程序。

先用基于Mono的dnx:

/Git/dotnet/dnx/artifacts/build/dnx-mono/bin/dnx . run

运行结果:

Hello from DNX!

运行成功!

接着用基于CoreCLR的dnx:

/Git/dotnet/dnx/artifacts/build/dnx-coreclr-darwin-x64/bin/dnx . run

运行结果:

Resource string id=0x17FC System.DllNotFoundException: Resource string id=0x170B
   at Interop.mincore.GetStdHandle(Int32 nStdHandle)
   at System.Console.<>c__DisplayClass0.<get_Error>b__5()
   at System.Console.EnsureInitialized[T](T& field, Func`1 initializer)
   at dnx.host.RuntimeBootstrapper.PrintErrors(Exception ex)
   at dnx.host.RuntimeBootstrapper.Execute(String[] args)
   at DomainManager.Execute(Int32 argc, Char** argv)

运行失败。可能是少了某个程序集或者程序集版本不对,暂不去研究。基于CoreCLR的dnx目前还在开发中,出问题也正常。

在Mac上如此折腾一下,一是可以实际体会一下.NET跨平台的进展,二是可以随时折腾dnx,改改dnx的代码,编译出来就可以用它跑.NET程序。

时间: 2024-08-28 18:25:28

在Mac上用自己编译出的DNX运行.NET程序的相关文章

在Mac OS X上用自己编译出的CoreCLR运行.NET程序

当昨天被Mac OS X上无法编译CoreCLR的问题困扰时(详见Mac OS X上尝试编译CoreCLR源代码),后来发现这个难题竟然被神人@kangaroo给解决了,连CoreCLR的微软开发人员也大吃一惊(详见#105). @kangaroo This is awesome! Thank you so much for doing it! I’ll start reviewing it in the morning. 今天发现,@kangaroo修改后可在OS X上编译的版本已被合并到Co

剖析并利用Visual Studio Code在Mac上编译、调试c#程序

0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很不错的文档编辑器.不过匹夫更关心的是它的跨平台能力,这不,匹夫偷得半日闲,写篇小文来聊聊在Mac上如何使用Visual Studio Code编译和调试C#代码,最后匹夫也会尝试把Visual Studio Code嵌入Unity3D中,作为一个准“IDE”使用. 0x01 Visual Studi

剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】

0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很不错的文档编辑器.不过匹夫更关心的是它的跨平台能力,这不,匹夫偷得半日闲,写篇小文来聊聊在Mac上如何使用Visual Studio Code编译和调试C#代码,最后匹夫也会尝试把Visual Studio Code嵌入Unity3D中,作为一个准“IDE”使用. 0x01 Visual Studi

Delphi for iOS开发指南(1):在Mac上配置你的开发环境

http://cache.baiducontent.com/c?m=9d78d513d99516f11ab7cf690d678c3b584380122ba7a0020fd18438e4732b40506793ac57240773a4d20c1116dc4348adb0687d6d4566f58cc9fb57c0ebcc757a9f2743215dd01d05d36ef39c00388477cb4deedb5ca0bcfb3092aad2d2de49008a155e2bdea7960c575299

如何在 Mac 上通过 Boot Camp 安装 Windows?

如何在 Mac 上通过 Boot Camp 安装 Windows? The following contents are chosen from the apple website, thanks for your visit~~ Good time! Boot Camp 可帮助您在 Mac 上安装 Microsoft Windows.安装后,请重新启动 Mac,以在 macOS 和 Windows 之间切换. 开始之前,确保您已备齐所有必需物品: 基于 Intel 的 Mac 包含 64 位

mysql在mac上的编译和调试

今天正式开始漫漫长路,打算这几年用业余时间刷刷mysql5.5源代码,由于手边的书籍基本都是基于mysql5.5的,所以就不用5.7版本的代码了,更何况我更关注基本内核.因此,没有特殊指明,那么,一般都指mysql5.5版本.工作原因没有深入去了解mysql,既然想玩技术,工作上的技术挑战没有研究mysql内核这么直接,因此,决定用业余时间搞搞些技术活,一方面可以让自己的技术深入储备,另一方面也让自己在工作之余从技术中获得点点成就感. 选择mac平台因为简单,windows平台我也编译成功了,但

ffmpeg在Mac上的编译

原帖地址:https://blog.csdn.net/minger1202/article/details/52302500 Mac上的编译 在Ubuntu系统下编译ffmpeg的源码很方便,缺少什么第三方的工具或者lib直接就可以apt-get,再不行就百度,总之解决起来很方便.最近屌丝鸟枪换Mac了,所以这里就说说Mac上如何编译ffmpeg源码以及如何解决编译过程中遇见的问题. 下载源码配置环境 首先你需要下载源码的地址:https://ffmpeg.org/download.html#g

尝试在Mac上编译DNX

自从XRE改名为DNX至今,从来没有在Mac OS X上成功编译过DNX.一直很纳闷,难道DNX的开发人员不用Mac?今天突然明白了,DNX的开发人员真的不用Mac.而且DNX用的2个持续集成服务AppVeyor与Travis,一个是Windows环境,一个是Linux环境,就是没有Mac OS X环境. 看来不能指望DNX的开发人员短期内解决这个问题了,只能自己动手. 编译的错误信息如下(编译命令./build.sh): Restore complete, 725ms elapsed info

Mac上编译并运行Android5.0源码

下载.配置环境.build和运行参考的都是Android Source提供的文档,包括:Initializing a Build Environment,Downloading the Source和Building the System. 我是在OSX 10.10.3上编译的AOSP,记录一下中途碰到的各种问题. 下载 AOSP需要FQ,而且经常会断,还好是断点续传,坚持个两三天怎么也能下下来. case sensitive system 我在Mac上对file system只会用Disk U