31

这是DNX的描述:

.NET 执行环境 (DNX) 是一个软件开发工具包 (SDK) 和运行时环境,拥有构建和运行适用于 Windows、Mac 和 Linux 的 .NET 应用程序所需的一切。它提供宿主进程、CLR 宿主逻辑和托管入口点发现。DNX 是为运行跨平台 ASP.NET Web 应用程序而构建的,但它也可以运行其他类型的 .NET 应用程序,例如跨平台控制台应用程序。

DNX 是 Mono 的替代品吗?如果不是,那会有什么区别?

4

3 回答 3

31

是的,DNX 与 Mono 的 mono.exe 相当。或者就此而言,其他 VM 语言的运行时,如 Java (java.exe) 或 Python (python.exe)。它们都解决了相同的先有鸡还是先有蛋的问题,它们运行在不知道有关 VM 的 bean 的操作系统上。它必须首先初始化,需要定位程序的入口点,并且需要在程序开始运行之前运行 Main() 方法。

DNX 与这些其他 VM 的一个小区别是它将 CLR 和抖动仍然保留在单独的库 coreclr.dll 中。其他的都是单体的,所有运行时支持代码都编译成一个 exe。保持整体性可以提高冷启动性能。一旦CoreCLR稳定并且没有无数不同的beta版本,dnx也可能会发生一些事情。

否则,这遵循 Windows 上的 .NET 体系结构,它是 c:\windows\system32\mscoree.dll 引导 CLR。CLR 和 jitter 是单独的 DLL,用于 .NET 4.x 的 clr.dll 和 clrjit.dll。Mscoree 使用了大量的诡计和欺骗手段,使您看起来可以从单个 EXE 文件启动托管程序。特别是从 32 位 EXE 文件创建 64 位进程的技巧是英雄,它修补了内部操作系统加载程序结构来完成这一壮举。这要求 Windows 本身知道 EXE 包含托管代码。不能很好地转化为其他操作系统(如 Linux 和 OSX)的技巧,因此他们决定为 CoreCLR 采用更传统的方式。


更新: DNX 现在已弃用并由 DOTNET 取代。否则不会使此帖子内容无效,只是更易于使用。

于 2015-05-21T14:47:52.837 回答
30

DNX 是 Mono 的替代品吗?如果不是,那会有什么区别?

Mono 是一个开源开发平台。它的实现基于 CLI 规范,例如 Microsoft 提供的平台。它包括一个 C# 编译器、一个运行时、一个 BCL 和称为 MCL(Mono 类库,它是 BCL 的扩展)的东西。Mono 本身可以在不同架构的 Linux、OS X、BSD 和 Windows 上运行。

DNX 是一个 SDK,包含构建和运行应用程序所需的所有位(包括自定义实用程序,例如dnu用于构建和打包应用程序的工具),包括 CLR(目前它与CoreCLR一起部署)。这个 CoreCLR 也可以与 Mono 切换,这意味着它将消耗 Mono 运行时、编译器等的所有服务。

与 DNX 相比,Mono 提供了完整的平台(运行时、BCL、JIT 等)。DNX 在最低级别用作调用 CoreCLR 的本机进程。DNX 将用于自托管或从命令行构建和运行等场景。

正如@xanatos 指出的那样,DNX 渴望能够将运行时与应用程序一起发布,其中多个运行时将能够并排运行而不会相互干扰。

也许这张图片可以澄清:

DNX 图

这是 DNX 可以在上面运行的列表(x86 显示两倍,是默认值):

Active Version           Runtime Architecture Location                           Alias
------ -------           ------- ------------ --------                           -----
  *    1.0.0-beta2-10735 clr     x86          C:\Users\victorhu\.dnx\runtimes default
       1.0.0-dev         clr     x64          C:\Users\victorhu\.dnx\runtimes clr-x64-dev
       1.0.0-dev         clr     x86          C:\Users\victorhu\.dnx\runtimes clr-x86-dev
       1.0.0-dev         coreclr xd64         C:\Users\victorhu\.dnx\runtimes coreclr-x64-dev
       1.0.0-dev         coreclr x86          C:\Users\victorhu\.dnx\runtimes coreclr-x86-dev
       1.0.0-dev         mono                 C:\Users\victorhu\.dnx\runtimes mono-dev

有一个详尽的wiki 页面解释了 DNX 结构以获取更多信息。@Will 还指出了ASP.NET 文档页面

更新:25/02/2016

DNX 现在已弃用,取而代之的是.NET CLI Tools

更新:2020 年 8 月 6 日

.NET CLI 工具现已停用,取而代之的是dotnet sdk

于 2015-05-21T13:10:11.667 回答
2

DNX 已退役,正如它在回购网站上所说的那样。最好将.NET CLI与 Mono 进行比较。.NET CLI 是新项目,它不支持所有 .NET 库案例。它拥有自己的与 .NET 框架不同的核心库。

于 2016-02-02T07:13:32.670 回答