DNX против ядра DNX

Я начал очень простой проект ASP.Net MVC (бета-версия) "пинать шины" в VS2015, и у меня возникла проблема, связанная с ссылками на DNX и DNX Core.

В этом примере я пытаюсь использовать DateTime.ToShortDateString() и включить Intellisense для DNX Core.

«Ошибка

Я понимаю, что это потому, что это не реализовано в DNX Core, и я могу обернуть вокруг него директивы компилятора.

Условная компиляция

Это правильный подход? Задокументированы ли где-нибудь различия между двумя платформами? Наконец, если я работаю только с Windows, все IIS постоянно, предлагает ли DNX Core что-нибудь, или моей первой задачей должно быть просто удалить его из файла project.json?


person Joe    schedule 27.07.2015    source источник


Ответы (1)


Я думаю, единственный ответ - это зависит.

Dnx против Dnx Core

Dnx работает поверх современной платформы .NET (а также моно) и имеет доступ к полному BCL .NET 4.5.2 (теперь .NET 4.6). В основном все было добавлено в .NET с версии 1.0.

Dnx Core работает поверх CoreClr, который по сути представляет собой урезанную версию .NET Framework. Чего-то не хватает, что-то никогда не попадет в CoreClr по разным причинам. Я не знаю конкретного списка того, что будет/не появится. Вы можете покопаться в corefx и coreclr проекты github, чтобы увидеть, что там есть.

Теперь вопрос действительно о лучшем подходе. У вас есть несколько вариантов.

Если вы никогда не планируете запускать проект в CoreCLR, вы можете полностью удалить его из своего проекта.json.

Если вы планируете работать на CoreCLR (какой бы ни была причина), вы можете сделать несколько вещей.

  • Используйте общие методы API для среды

    В вашем случае, если theDate.ToString("d") эквивалентно theDate.ToShortDateString(), то почему бы просто не использовать первое?

  • Используйте соответствующую директиву компилятора DNX451 и т. д.

    Для сред, в которых нет реализации того, что вы ищете, вы можете создать или реализовать свою собственную версию, если это имеет смысл.

person David Driscoll    schedule 27.07.2015
comment
Здесь есть недоразумение, поскольку DNX Core не существует. DNX - это среда выполнения .NET, которая представляет собой процесс размещения - в основном то же самое для CoreCLR и CLR, за исключением очень незначительных изменений в загрузке во время выполнения. DNX — это не то, для чего мы компилируем или используем напрямую, кроме как для выполнения кода и других вещей, связанных с инфраструктурой. Фактическая среда выполнения .NET — это CLR или CoreCLR (подробности здесь: docs.asp.net/en/latest/dnx/overview.html). - person pg0xC; 14.10.2015
comment
Да, но вопрос был адресован dnx, и для новых пользователей, пытающихся понять разницу между coreclr и clr, проще использовать ту же формулировку, которую они видят в своих приложениях. В project.json есть dnxcore и dnx, поэтому проще сказать их. Хотя время выполнения может быть одинаковым, способ взаимодействия с dnx и без dnx (скажем, в PCL) может различаться. - person David Driscoll; 15.10.2015
comment
Это очень поясняющая статья о «DNX против ядра DNX»: docs.asp.net/en/latest/getting-started/ - person AlexandruC; 16.12.2015