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

в 7:50, , рубрики: .net, .net micro framework, build system, microsoft, open source, Интернет вещей, Программирование

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:reposnetmf-interpreter а PKStudio — в D:reposPKStudio folder
  5. Скачайте binary tools zip-файл. Он содержит исполняемые файлы, необходимые для сборки Netmf-interpreter.
  6. Разархивируйте содержимое в родительскую папку репозитория. Для примера выше директории bin and tools будут расположены в папке D:repos (D:reposbin и D:repostools)

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

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

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 вместе!

Автор: AlexandrSurkov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js