Обзор DNX¶
Что такое .NET Execution Environment?¶
.NET Execution Environment (DNX) - это software development kit (SDK) и среда разработки, у которой есть все, что вам надо, чтобы собрать и запустить .NET приложение на Windows, Mac и Linux. DNX занимается процессом хостинга, хостинговой логикой CLR и работает с точкой входа приложения. DNX был разработан для запуска кроссплатформенных ASP.NET веб приложений, но он может работать и с другими типами приложений .NET, например, с кроссплатформенными приложениями.
Почему DNX?¶
DNX дает вам возможность разрабатывать и запускать приложение на разных платформах (Windows, Mac и Linux) и использовать разные направления .NET (.NET Framework, .NET Core и Mono). С помощью DNX вы можете разрабатывать приложение на одной платформе, а запустить его на другой, если совместимый DNX установлен на этой платформе. Также вы можете работать над DNX проектами совместно с кем-то, используя ваши любимые инструменты для разработки, установленные на вашей платформе.
Созданный для .NET Core DNX автоматически упрощает работу, необходимую для разработки кроссплатформенных приложений с помощью .NET Core. Он занимается CLR хостингом, обрабатывает зависимости и настраивает приложение. Вы можете определять проекты и решения, используя упрощенный JSON формат (project.json), собирать проекты и публиковать их.
Экосистема пакетов Менеджеры пакетов полностью изменили вид современной разработки ПО, и DNX значительно упрощает процесс создания и использования пакетов. DNX предлагает инструменты для инсталляции, создания и управления пакетами NuGet. DNX просто устанавливает NuGet пакеты на разные платформы, а затем напрямую их извлекает по надобности. Вы можете получить доступ к пакетам NuGet напрямую из проекта, а переходные зависимости будут обрабатываться для вас. Вы можете создавать и устанавливать средства разработки в качестве пакетов для ваших проектов и глобально для всей системы.
Дружелюбный к открытому исходному коду DNX упрощает работу с проектами с открытым исходным кодом. Для DNX проектов вы можете легко заменить существующую зависимость ее исходным кодом и позволить DNX скомпилировать ее в памяти во время рантайма. Далее вы можете провести отладку исходного кода и изменить его без необходимости менять остальную часть приложения.
Проекты¶
DNX проект - это папка с файлом project.json. Название проекта - это имя папки. Мы используем DNX проекты для создания пакетов NuGet. Файл project.json определяет метаданные пакета, зависимости проекта и то, какие фреймворки будут задействованы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | {
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "daroth" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"frameworks": {
"net451": { },
"dotnet5.4": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading": "4.0.11-beta-23516"
}
}
}
}
|
Все файлы в папке по умолчанию является частью проекта, если их не исключить специально из project.json.
Вы также можете определять исполняемые команды как часть проекта (см. Команды).
Вы определяете, какие фреймворки будут использоваться, в свойстве “frameworks”. DNX проведет компиляцию для каждого фреймворка и создаст соответствующую папку lib в пакете NuGet.
Вы можете использовать .NET Development Utility (DNU) для создания, упаковки и публикации DNX проектов. При сборке проекта на выходе мы получаем бинарный файл данного проекта. При упаковке мы получаем пакет NuGet, который может быть отправлен ко всем пакетам (например, http://nuget.org), а затем использован. Во время публикации происходит сборка требуемого DNX и пакетов в одну папку, а затем ее можно развернуть как приложение.
Зависимости¶
Зависимости в DNX состоят из имени и номера версии. Номер версии должен следовать семантическому версионированию (Semantic Versioning). Обычно зависимости ссылаются на установленный пакет NuGet или другой DNX проект. Ссылки на проект обрабатываются в таких же папках текущего проекта или касаются путей к проекту, которые указываются с помощью global.json на уровне решения:
1 2 3 4 5 6 | {
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-final"
}
}
|
В файле global.json также определяется минимальная версия DNX (“sdk” версия), необходимая для создания проекта.
Зависимости являются переходными в том, что вам нужно указывать только зависимости высокого уровня. DNX будет работать со всем графом зависимостей, используя установленные пакеты NuGet. Ссылки проекта обрабатываются во время рантайма в памяти. Это обозначает, что ваше DNX приложение может быть доступно как бинарные файлы или как файлы с исходным кодом.
Пакеты¶
Чтобы использовать зависимости из пакетов, их сперва надо установить. Вы можете воспользоваться DNU, чтобы установить новый пакет в существующий проект, либо же восстановить имеющиеся зависимости. С помощью следующей команды вы можете скачать и установить все пакеты, которые перечислены в файле project.json:
dnu restore
Пакеты можно восстановить с помощью настроенного набора фидов пакета. Мы настраиваем доступные фиды пакета с помощью конфигурационных файлов NuGet (NuGet.config).
Команды¶
Команда - это именованная функция с определенными аргументами. Вы можете определить команды в файле project.json:
1 2 3 4 | "commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
|
Затем вы можете использовать DNX, чтобы выполнять команды, определенные в проекте, например:
dnx web
Команды можно отправлять как пакеты NuGet, а затем использовать DNU, чтобы установить команды глобально на всей машине:
dnu commands install MyCommand
См. Использование команд.
DNX Application Host¶
DNX Application Host - это обычно первая управляемая точка входа, вызываемая DNX, которая отвечает за обработку зависимостей, парсинг project.json, предоставление дополнительных сервисов и запуск приложения.
Как вариант, DNX может запустить приложение напрямую. Для этого вам надо, чтобы приложение было полностью собрано и все зависимости находились в одной директории. Использование DNX без DNX Application Host не является общепринятой практикой.
DNX application host предоставляет набор сервисов с помощью внедрения зависимостей (например, IServiceProvider, IApplicationEnvironment и ILoggerFactory). Эти сервисы могут быть внедрены в конструктор класса для точки входа Main или как дополнительные параметры метода Main.
Модули компиляции¶
Модули компиляции позволяют вам участвовать в процессе компиляции DNX. Вы реализуете модуль компиляции с помощью интерфейса ICompileModule, а затем вы вставляете этот модуль в compiler/preprocess или compiler/postprocess вашего проекта.