Как объять необъятное: система сборки .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, способная существенно упростить процесс изучения. Она умеет наглядно отображать компоненты и позволяет собирать «порты» из совокупности этих компонент.
В общем виде отображение компонент выглядит так:
Изучая составные части репозитория, можно двигаться от такх абстрактных понятий, как Features и Library Categories к библиотекам (Library) и исходным файлам:
Есть возможность построить «порт» и найти ошибки в коде, в случае их наличия:
Одной из самых важный функций является построение графов зависимостей компонент:
Она позволяет увидеть, каким образом собирается воедино разрозненный код.
Ну и еще одной важной функцией является конвертер в проекты Keil uVision. Он позволяет создать файл проекта для этой IDE, который будет содержать все необходимые исходники:
Скриншоты всех функций 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:\repos\netmf-interpreter, а PKStudio — в D:\repos\PKStudio folder
- Скачайте binary tools zip-файл. Он содержит исполняемые файлы, необходимые для сборки Netmf-interpreter.
- Разархивируйте содержимое в родительскую папку репозитория. Для примера выше директории bin and tools будут расположены в папке D:\repos\ (D:\repos\bin и D:\repos\tools)
Далее вам нужно собрать часть репозитория .Net Micro Framework Interpreter, чтобы получить несколько необходимых DLL-файлов.
- Откройте командную строку и перейдите в директорию, содержащую .Net Micro Framework Interpreter (например так cd /d D:\WORKDIR\GitHub\netmf-interpreter)
- Установите необходимые переменные окружения, запустив файл setenv_vs.cmd
- Перейдите в директорию .Net Micro Framework Interpreter Framework\Tools (например, вот так cd /d D:\WORKDIR\GitHub\netmf-interpreter\Framework\Tools)
- Запустите процесс сборки, выполнив команду msbuild BuildTasks.sln /p: flavor=debug
Если все было сделано правильно, то сборка будет успешно завершена и вы сможете найти файл Microsoft.SPOT.Tasks.Internal.dll в папке BuildOutput\public\Debug\Server\dll.
Теперь можно открыть проект PKStudio. Но сделать это нужно с теми же переменными окружения, которые устанавливаются для .Net Micro Framework Interpreter.
Для этого в той же командной строке, где были установлены переменные окружения, нужно запустить Visual Studio 2015, выполнив devenv.exe (например, так «C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.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:
Тут все хорошо, кроме того, что две Library Category не имеют реализаций в виде Library.
А вот диаграмма связей для Features Hardware и Core
Видно, что Core реализуется напрямую несколькими Libraries без Library Category.
Кроме генерации диаграмм, PKStudio умеет отображать компоненты репозитория в виде древовидной структуры и их свойства.
Features:
Library Categories:
Libraries:
Кроме того, репозиторий содержит и другие типы компонент.
Assemblies:
Processors:
Ну и конечно «порты» именуемые Solutions. Они представляют собой объединение вышеуказанных компонент:
Заключение
Кроме того, что описано выше, PKStudio еще имеет поиск по компонентам, верификацию связей между ними, конвертер проектов в Keil uVision, возможность компиляции Solution и т.д. Но о них будет рассказано в другой раз.
PKStudio — отличный инструмент для знакомства с репозиторием .NetMF. Однако он далек от совершенства. Поэтому, если вы столкнулись с какими-либо проблемами при работе с ним, пишите комментарии и создавайте issues на GitHub.
Будем разбираться с .NetMF и совершенствовать PKStudio вместе!