Это меня смущает. Я понял, что DNX и .NET Core CLI были просто инструментами для запуска приложений .NET Core. Если это всего лишь инструменты, то почему переход с одного на другой требует изменения кода?
DNVM/DNU/DNX — это не просто инструменты. DNX также был средой выполнения. Он отвечал за загрузку CLR и вызов вашего приложения. Это также означало, что у него было много информации о среде выполнения и приложении, такой как зависимости, среда и т. д. Эта информация была доступна приложению через различные службы, которые вы могли внедрить, такие как IRuntimeEnvironment
, IApplicationEnvironment
и ILibraryManager
.
В свою очередь, у MVC есть служба под названием IAssemblyProvider
. Это отвечает за предоставление сборок, в которых MVC должен искать контроллеры, среди прочего. Реализация этого по умолчанию была основана на ILibraryManager
, который является специфичным для DNX сервисом. Это означает, что он больше не будет работать при переключении на среду выполнения на основе dotnet, которая отключается пакетами, вместо использования отдельного инструмента, такого как DNVM.
Чтобы исправить это, команда MVC сначала начала полагаться как на службы DNX, так и на более новую альтернативу dotnet (Microsoft.Extensions.DependencyModel
). Вы можете увидеть код здесь а>. По сути, он проверяет, доступен ли ILibraryManager
, специфичный для DNX, и, если нет, возвращается к альтернативному API-интерфейсу dotnet.
Проблема с этим подходом заключается в том, что он вводит дополнительные и в большинстве случаев избыточные зависимости (Microsoft.Extensions.PlatformAbstractions.Dnx
) в MVC, в то время как большинство людей начнут использовать его с инструментами dotnet и средой выполнения. Помните; DNX и т. д. все еще находятся в стадии бета-тестирования и исчезнут в RTM.
Вместо этого они выбрали текущее решение; есть отдельный пакет Microsoft.AspNetCore.Mvc.Dnx
, который содержит, среди прочего, IAssemblyProvider
на основе DNX для MVC. Вы можете увидеть, что делает метод AddMvcDnx
здесь< /а>.
Это означает, что те немногие люди, которые следят за предварительными выпусками, должны будут внести некоторые изменения в свой код, чтобы по-прежнему работать на DNX (хотя я бы перешел на dotnet как можно скорее), в то время как новым людям нужно будет только позвонить AddMvc
как обычно.
Надеюсь, что-то из этого имело смысл. Это действительно может запутать :)
person
khellang
schedule
01.03.2016