Обзор DNX

Daniel Roth

Что такое .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 проектами.

Зависимости

Зависимости в 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 вашего проекта.

.NET Version Manager

На своем компьютере вы можете установить несколько версий DNX. Для этого вам нужно использовать .NET Version Manager (DNVM). DNVM позволяет вам просматривать разные DNX версии, устанавливать новые и переключаться между ними DNX.

См. Начинаем.