Как объять необъятное: система сборки .NET Micro Framework Часть 2

Как объять необъятное: система сборки .NET Micro Framework Часть 2

Продолжаем цикл статей, посвященных системе сборки .Net Micro Framework. Понятие "Система сборки проектов" всегда появляется в проектах, масштаб и сложность которых перерастает стандартные типы, имеющиеся в составе IDE. А если подразумевается, что проект будет создаваться в нескольких средах или вообще не привязан к какой бы то ни было среде разработки, то без системы сборки проекта обойтись будет просто невозможно. Ярким примером таких проектов является .Net Micro Framework — реализация платформы Microsoft .NET для микроконтроллеров.

В прошлой статье был обзор его системы сборки и особенностей ее реализации. Прежде чем двигаться дальше и изучать составные части дистрибутива, нужно познакомиться с инструментами, позволяющими это сделать. В этой статье будет сделан обзор программы PKStudio, которая позволяет удобно исследовать компоненты и связи внутри дистрибутива .Net Micro Framework, а также обладает другими интересными возможностями.

PKStuio — это результат исследований .NetMF длиной боле года. Программа была написана моим коллегой Игорем Киселевым и мной в процессе изучения внутреннего устройства дистрибутива. Целью было научиться создавать "порты" .NetMF для разных плат. Документация для этого существует, но она не очень то и помогала.

Сначала PKStudio умела только визуализировать MSBuild компоненты и их связи. Но со временем она развивалась и превратилась в IDE, которая позволяет компилировать "порты", исследовать содержимое дистрибутива, преобразовывать "порты" в проекты для uVisuon Keil и многое другое. Программа была написана в далеком 2011 году для версии .NetMF 4.2, но и сейчас не потеряла своей актуальности для версии 4.4

Что же такое PKStudio

Любой, кто пытался выяснить, что находится внутри .Net Micro Framework, знает, что это не для слабонервных. Интересная и перспективная технология имеет множество сложных внутренних взаимосвязей. В процессе анализа репозитория родилась IDE, способная существенно упростить процесс изучения. Она умеет наглядно отображать компоненты и позволяет собирать "порты" из совокупности этих компонент.

В общем виде отображение компонент выглядит так:
Как объять необъятное: система сборки .NET Micro Framework Часть 2

Изучая составные части репозитория, можно двигаться от такх абстрактных понятий, как Features и Library Categories к библиотекам (Library) и исходным файлам:
Как объять необъятное: система сборки .NET Micro Framework Часть 2

Есть возможность построить "порт" и найти ошибки в коде, в случае их наличия:
Как объять необъятное: система сборки .NET Micro Framework Часть 2

Одной из самых важный функций является построение графов зависимостей компонент:
Как объять необъятное: система сборки .NET Micro Framework Часть 2

Она позволяет увидеть, каким образом собирается воедино разрозненный код.

Ну и еще одной важной функцией является конвертер в проекты Keil uVision. Он позволяет создать файл проекта для этой IDE, который будет содержать все необходимые исходники:
Как объять необъятное: система сборки .NET Micro Framework Часть 2

Как объять необъятное: система сборки .NET Micro Framework Часть 2

Скриншоты всех функций PKStudio можно посмотреть тут.

Как собрать и запустить PKStudio

PKStudio имеет множество ссылок на .Net Micro Framework Interpreter. Поэтому, перед тем, как ей воспользоваться, нужно выполнить несколько шагов.

Внимательно прочитайте все пункты перед тем, как их выполнять.

  • Установите Visual Studio 2015 (Community, Pro or Ultimate edition)
  • Скачайте исходный код PKStudio любым удобным вам способом
  • Скачайте репозиторий .Net Micro Framework Interpreter. Например, этим способом. Кроме того, разные способы получения репозитория .NetMF описаны здесь и здесь.
  • ВАЖНО: директория с репозиторием Netmf-interpreter и директория с репозиторием PKStudio должны иметь общую родительскую директорию! Например, если у вас есть папка D:repos, то репозиторий netmf-interpreter будет находиться в D:reposnetmf-interpreter а PKStudio — в D:reposPKStudio folder
  • Скачайте binary tools zip-файл. Он содержит исполняемые файлы, необходимые для сборки Netmf-interpreter.
  • Разархивируйте содержимое в родительскую папку репозитория. Для примера выше директории bin and tools будут расположены в папке D:repos (D:reposbin и D:repostools)
  • Далее вам нужно собрать часть репозитория .Net Micro Framework Interpreter, чтобы получить несколько необходимых DLL-файлов.

  • Откройте командную строку и перейдите в директорию, содержащую .Net Micro Framework Interpreter (например так cd /d D:WORKDIRGitHubnetmf-interpreter)
  • Установите необходимые переменные окружения, запустив файл setenv_vs.cmd
  • Перейдите в директорию .Net Micro Framework Interpreter FrameworkTools (например, вот так cd /d D:WORKDIRGitHubnetmf-interpreterFrameworkTools)
  • Запустите процесс сборки, выполнив команду msbuild BuildTasks.sln /p:flavor=debug
  • Если все было сделано правильно, то сборка будет успешно завершена и вы сможете найти файл Microsoft.SPOT.Tasks.Internal.dll в папке BuildOutputpublicDebugServerdll.

    Теперь можно открыть проект PKStudio. Но сделать это нужно с теми же переменными окружения, которые устанавливаются для .Net Micro Framework Interpreter.
    Для этого в той же командной строке, где были установлены переменные окружения, нужно запустить Visual Studio 2015, выполнив devenv.exe (например, так "C:Program Files (x86)Microsoft Visual Studio 14.0Common7IDEdevenv.exe" вместе с кавычками)

    Когда Visua Studio 2015 будет запущена, вы сможете открыть, собрать и запустить PKStudio.

    Для дальнейшей работы уже не обязательно повторять все шаги. Важно понимать только, что для компиляции или запуска PKStudio нужно установить переменные окружения. Поэтому, если вы захотите что-то поменять в исходном коде, то нужно будет запустить из командной строки с установленными переменными окружения (как указано выше) Visual Studio. А, если нужно просто запустить PKStudio, то из командной строки можно сразу запускать pkstudio.exe.

    Что можно посмотреть с помощью PKStudio

    Итак, репозитоий .NetMF состоит из нескольких типов компонент. В первую очередь это Features — компоненты, объединяющие основные функции "порта". Features "зависят" от Library Caterories — наборов библиотек, реализующих те или иные части Feature. Library Category могут быть реализованы одной или несколькими Library — библиотеками, содержащими сам исходный код. Причем, по идее, Library выполняют один и тот же функционал, но для разных случаев. Например, для разных процессоров. Вроде все просто и логично, но по каким-то причинам такие связи не всегда соблюдаются для всех компонентов.

    PKStudio позволяет генерировать диаграммы, помогающие понять нюансы отношений между компонентами.

    На диаграмме ниже видно раскрытие связей для Featue Debugger:

    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Тут все хорошо, кроме того, что две Library Category не имеют реализаций в виде Library.

    А вот диаграмма связей для Features Hardware и Core

    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Видно, что Core реализуется напрямую несколькими Libraries без Library Category.

    Кроме генерации диаграмм, PKStudio умеет отображать компоненты репозитория в виде древовидной структуры и их свойства.

    Features:
    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Library Categories:
    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Libraries:
    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Кроме того, репозиторий содержит и другие типы компонент.

    Assemblies:
    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Processors:
    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Ну и конечно "порты" именуемые Solutions. Они представляют собой объединение вышеуказанных компонент:

    Как объять необъятное: система сборки .NET Micro Framework Часть 2

    Заключение

    Кроме того, что описано выше, PKStudio еще имеет поиск по компонентам, верификацию связей между ними, конвертер проектов в Keil uVision, возможность компиляции Solution и т.д. Но о них будет рассказано в другой раз.

    PKStudio — отличный инструмент для знакомства с репозиторием .NetMF. Однако он далек от совершенства. Поэтому, если вы столкнулись с какими-либо проблемами при работе с ним, пишите комментарии и создавайте issues на GitHub.

    Будем разбираться с .NetMF и совершенствовать PKStudio вместе!