Похожа ли среда выполнения .NET (DNX) на Mono?

Вот описание DNX:

.NET Execution Environment (DNX) - это комплект разработки программного обеспечения (SDK) и среда выполнения, в которой есть все необходимое для создания и запуска приложений .NET для Windows, Mac и Linux. Он предоставляет хост-процесс, логику хостинга CLR и обнаружение управляемых точек входа. DNX был создан для запуска кроссплатформенных веб-приложений ASP.NET, но он также может запускать другие типы приложений .NET, такие как кроссплатформенные консольные приложения.

DNX - это альтернатива Mono? Если нет, то какая будет разница?


person Vano Maisuradze    schedule 21.05.2015    source источник
comment
Соблазн проголосовать как дубликат: stackoverflow.com/questions/28379462/   -  person nawfal    schedule 28.04.2016


Ответы (3)


DNX - это альтернатива Mono? Если нет, то какая будет разница?

Mono - это платформа разработки с открытым исходным кодом. Его реализация основана на спецификации CLI, такой как платформа, предоставляемая Microsoft. Он включает компилятор C #, среду выполнения, BCL и нечто, называемое MCL (библиотека классов Mono, которая является расширением BCL). Сам Mono может работать в Linux, OS X, BSD и Windows на разных архитектурах.

DNX - это SDK, содержащий все биты, необходимые для создания и запуска приложения (включая специальные утилиты, такие как dnu, который используется для сборки и упаковки приложения), включая среду CLR (в настоящее время она развертывается с помощью CoreCLR ). Этот CoreCLR также можно переключить на Mono, что означает, что он будет использовать все службы среды выполнения Mono, компилятора и т. Д.

Mono, в отличие от DNX, предоставляет полную платформу (Runtime, 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

Существует обширная страница вики, на которой подробно описывается структура DNX. @Will также указывает на страницу документации ASP.NET.

Обновление: 25.02.2016

DNX заменен на .NET CLI Tools.

Обновление: 06.08.2020

Инструменты интерфейса командной строки .NET заменены на dotnet sdk

person Yuval Itzchakov    schedule 21.05.2015
comment
наоборот: я не вижу, насколько левая часть противоположна правой. Даже Mono отделен от конкретной реализации ОС ... - person xanatos; 21.05.2015
comment
Я чувствую себя довольно глупо ... Что такое среда исполнения? В чем разница между Mono и Dnx? Это просто прославленный установщик для .NET / CoreCLR / Mono? И полная версия .NET, и Mono могут компилировать и выполнять приложения. В Mono есть даже интерактивная оболочка C # ... - person xanatos; 21.05.2015
comment
Теперь становится яснее :-) Из здесь кажется, что они хотят иметь рядом среды выполнения, которые устанавливаются вместе с приложением, вместо общесистемных сред выполнения ... - person xanatos; 21.05.2015
comment
@xanatos Ваши вопросы заставили меня откопать дополнительную информацию, которая полностью изменила мой ответ. Спасибо :) - person Yuval Itzchakov; 21.05.2015
comment
Где вы взяли эту картинку? Я уже пару лет не слышу писка про гелиос! ... - person Andrew Savinykh; 19.08.2015
comment
@zespri Это было на сайте документации для ASP.NET 5. Не знаю, где именно. - person Yuval Itzchakov; 19.08.2015
comment
Я считаю, что эта страница лучше, чем описание вики docs.asp.net /en/latest/dnx/overview.html - person ; 19.08.2015
comment
@ Буду ли я думать, что он в конечном итоге заменит вики - person Yuval Itzchakov; 19.08.2015
comment
@YuvalItzchakov у вас есть версия этого изображения с более высоким разрешением (такое же изображение сейчас находится на сайте aspnet / Home github в вики, такое же низкое разрешение) - это лучшее представление «нового мира», которое я когда-либо видел? Как говорится, изображение - это тысяча слов и т. Д. :) - person rawpower; 11.09.2015
comment
@Yuval: DNX будет реорганизован в RC2 и переведен из команды ASP.Net в команду CLR / CoreFx (см. github.com/dotnet/cli). Может быть, добавим примечание, чтобы не запутать более поздних читателей. - person Thomas; 20.11.2015

Да, DNX неплохо сравнивается с mono.exe от Mono. Или, если на то пошло, время выполнения других языков виртуальных машин, таких как Java (java.exe) или Python (python.exe). Все они решают одну и ту же проблему курицы и яйца, они работают в операционных системах, которые не знают о виртуальной машине. Сначала он должен быть инициализирован, точка входа в программу должна быть определена, а метод Main () должен быть изменен, прежде чем ваша программа сможет начать работу.

Одно небольшое отличие DNX от этих других виртуальных машин заключается в том, что он сохраняет среду CLR и джиттер в отдельной библиотеке, coreclr.dll. Другие являются монолитными, и весь код поддержки времени выполнения скомпилирован в один исполняемый файл. Монолитность улучшает характеристики холодного пуска. Вероятно, что-то, что произойдет и с dnx, когда CoreCLR стабилизируется и не будет иметь множества различных бета-версий.

В остальном это соответствует архитектуре .NET в Windows, именно c: \ windows \ system32 \ mscoree.dll загружает среду CLR. CLR и джиттер - это отдельные библиотеки DLL, clr.dll и clrjit.dll для .NET 4.x. Mscoree использует значительные уловки и обман, чтобы создать впечатление, будто вы можете запустить управляемую программу из одного EXE-файла. В частности, героический трюк по созданию 64-битного процесса из 32-битного EXE-файла, он исправляет внутренние структуры загрузчика операционной системы для достижения этой цели. Это требует, чтобы сама Windows знала, что EXE содержит управляемый код. Уловки, которые не подходят для других операционных систем, таких как Linux и OSX, поэтому они решили использовать более традиционный способ для CoreCLR.


Обновление: DNX устарел и заменен на DOTNET. В противном случае, не делая недействительным содержание этого сообщения, просто его проще использовать.

person Hans Passant    schedule 21.05.2015
comment
Ааа, зная, какую проблему они пытались решить, все становится ясно :-) - person xanatos; 22.05.2015

DNX больше не используется, как сказано на сайте репо. Лучше сравнить .NET CLI с Mono. .NET CLI - это новый проект, который поддерживает не все варианты библиотек .NET. У него есть собственные базовые библиотеки, отличные от .NET framework.

person user854301    schedule 02.02.2016