以下是DNX的说明:
.NET执行环境(DNX)是一个软件开发工具包 (SDK)和运行时环境,包含您需要构建的所有内容 并运行适用于Windows,Mac和Linux的.NET应用程序。它提供了一个 主机进程,CLR托管逻辑和托管入口点发现。 DNX 是为运行跨平台的ASP.NET Web应用程序而构建的,但它 也可以运行其他类型的.NET应用程序,例如跨平台 控制台应用程序。
DNX替代单声道吗?如果没有,那会有什么区别?
答案 0 :(得分:31)
是的,DNX与Mono的mono.exe相当。或者就此而言,其他VM语言的运行时,如Java(java.exe)或Python(python.exe)。它们都解决了同样的鸡蛋问题,它们运行在不熟悉VM的操作系统上。必须首先初始化,需要找到程序的入口点,并且在程序开始运行之前需要对Main()方法进行jitted。
DNX与这些其他虚拟机的一个小区别是它将CLR和抖动保持在一个单独的库coreclr.dll中。其他的是单片的,所有运行时支持代码都编译成单个exe。保持整体性可以改善冷启动性能。一旦CoreCLR稳定并且没有不同的beta版本,也可能会发生dnx会发生的事情。
这遵循Windows上的.NET体系结构,它是引导CLR的c:\ windows \ system32 \ mscoree.dll。并且CLR和jitter是单独的DLL,clr.dll和clrjit.dll for .NET 4.x. Mscoree使用重要的欺骗和欺骗使其看起来像您可以从单个EXE文件启动托管程序。特别是从32位EXE文件创建64位进程的技巧是英雄的,它修补了内部操作系统加载器结构以实现这一壮举。这要求Windows本身知道EXE包含托管代码。 Trickery无法很好地转换为Linux和OSX等其他操作系统,因此他们决定使用更传统的CoreCLR方式。
更新:DNX现已弃用,replaced by DOTNET。否则,不会使此帖子内容无效,只是更容易使用。
答案 1 :(得分:30)
DNX替代单声道吗?如果没有,那会有什么区别?
Mono是一个开源的开发平台。它的实现基于CLI规范,例如Microsoft提供的平台。它包括一个C#编译器,一个运行时,一个BCL和一个叫做MCL的东西(Mono Class Library,它是BCL的扩展)。 Mono本身可以在不同的架构上运行在Linux,OSX,BSD和Windows上。
DNX是一个SDK,包含构建和运行应用程序所需的所有位(包括用于构建和打包应用程序的dnu
等自定义实用程序),包括CLR(目前它与的 CoreCLR 强>)。这个CoreCLR也可以用Mono切换,这意味着它将消耗Mono运行时,编译器等的所有服务。
Mono而不是DNX提供完整平台(Runtime,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
对DNX结构进行了广泛的wiki page解释。 @Will也会指出ASP.NET docs page。
DNX现已退休,转而使用.NET CLI Tools。
答案 2 :(得分:2)
DNX已退休,正如repo site所述。最好将dotnet cli与单声道进行比较。 Dotnet cli是一个新项目,并不支持所有.net库,它拥有自己的核心库,与.net框架不同。