【问题标题】:Is .NET Execution Environment (DNX) similar to Mono?.NET 执行环境 (DNX) 是否类似于 Mono?
【发布时间】:2015-05-21 13:08:57
【问题描述】:

这里是DNX的描述:

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

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

【问题讨论】:

标签: .net mono dnx


【解决方案1】:

是的,DNX 与 Mono 的 mono.exe 相当。或者就此而言,其他 VM 语言的运行时,如 Java (java.exe) 或 Python (python.exe)。它们都解决了相同的先有鸡还是先有蛋的问题,它们运行在不知道有关 VM 的 bean 的操作系统上。必须先初始化,定位程序的入口点,并在你的程序开始运行之前jitit 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 现已弃用,replaced by DOTNET。否则不会使此帖子内容失效,只是更易于使用。

【讨论】:

  • 啊啊知道他们试图解决什么问题让一切都清楚:-)
【解决方案2】:

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 可以在上面运行的列表(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 page 解释 DNX 结构以获得更多信息。 @Will 也指出了 ASP.NET docs page

更新:25/02/2016

DNX 现已停用,支持 .NET CLI Tools

更新:2020 年 8 月 6 日

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

【讨论】:

  • 相反:我看不出“左侧”与“右侧”是如何相反的。甚至 Mono 也与操作系统的特定实现解耦......
  • 我觉得很蠢……什么是“执行环境”? Mono 和 Dnx 有什么区别?它仅仅是 .NET/CoreCLR/Mono 的美化安装程序吗?完整的 .NET 和 Mono 都可以编译和执行应用程序。 Mono 甚至还有一个 C# 交互式 shell...
  • 现在越来越清楚了 :-) 从here 看来,他们希望拥有与应用程序一起安装的并行运行时,而不是拥有系统范围的运行时.. .
  • @xanatos 您的问题让我挖掘了更多信息,这完全改变了我的答案。谢谢:)
  • @我认为它最终会取代维基
【解决方案3】:

正如repo site 所说,DNX 已退役。最好将 .NET CLI 与 Mono 进行比较。 .NET CLI 是新项目,它不支持所有 .NET 库案例。它拥有自己的不同于 .NET 框架的核心库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2011-05-01
    相关资源
    最近更新 更多