enter image description here


Продолжаем цикл статей, посвященных системе сборки .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, способная существенно упростить процесс изучения. Она умеет наглядно отображать компоненты и позволяет собирать "порты" из совокупности этих компонент.


В общем виде отображение компонент выглядит так:
enter image description here


Изучая составные части репозитория, можно двигаться от такх абстрактных понятий, как Features и Library Categories к библиотекам (Library) и исходным файлам:
enter image description here


Есть возможность построить "порт" и найти ошибки в коде, в случае их наличия:
enter image description here


Одной из самых важный функций является построение графов зависимостей компонент:
enter image description here


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


Ну и еще одной важной функцией является конвертер в проекты Keil uVision. Он позволяет создать файл проекта для этой IDE, который будет содержать все необходимые исходники:
enter image description here


enter image description here


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


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


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


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


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

Далее вам нужно собрать часть репозитория .Net Micro Framework Interpreter, чтобы получить несколько необходимых DLL-файлов.


  1. Откройте командную строку и перейдите в директорию, содержащую .Net Micro Framework Interpreter (например так cd /d D:\WORKDIR\GitHub\netmf-interpreter)
  2. Установите необходимые переменные окружения, запустив файл setenv_vs.cmd
  3. Перейдите в директорию .Net Micro Framework Interpreter Framework\Tools (например, вот так cd /d D:\WORKDIR\GitHub\netmf-interpreter\Framework\Tools)
  4. Запустите процесс сборки, выполнив команду 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:


enter image description here


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


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


enter image description here


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


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


Features:
enter image description here


Library Categories:
enter image description here


Libraries:
enter image description here


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


Assemblies:
enter image description here


Processors:
enter image description here


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


enter image description here


Заключение


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


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


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

Поделиться с друзьями
-->

Комментарии (3)


  1. SuhoffGV
    04.07.2016 13:41
    +1

    Не иначе как статья вместо хабра в GT прилетела.


  1. kekekeks
    04.07.2016 13:53

    Как специалисту по .NET Micro вам вопрос: планируется ли использовать там новые наработки CoreRT и AOT-компиляции?


    1. AlexandrSurkov
      05.07.2016 11:04

      Насколько я знаю, в явном виде ни CoreRT и AOT не планируются. Но в составе есть JITTER, который, если я не ошибаюсь, позволяет сделать предварительную компиляцию и разместить результат где-то в памяти.