New plugin
Первое, что нужно сделать — создать проект. Для этого нажимаем правой кнопкой на решении ThinkingHome или директории Plugins и выбираем пункт Add->New Project.
Любой плагин представляет собой библиотеку классов C#. Решения именуются следующим образом: ThinkingHome.Plugins.PluginName
, где «PluginName
» - название разрабатываемого плагина. Названия плагинов должны быть уникальными, причём называть правильно лучше сразу, так как переименование решения плагина не изменит имени его директории.
Название плагина на скриншоте ниже — «NooAPI
».
Основной класс решения должен быть назван PluginNamePlugin.cs
, здесь это NooAPIPlugin.cs
. Можно переименовать стандартный класс.
Далее нужно заменить AssemblyInfo
плагина на AssemblyInfo
проекта, для этого нужно удалить файл AssemblyInfo.cs
из решения проекта и перетащить ссылку на него из любого проекта плагина в репозитории. Путь в свойствах файла должен указывать на AssemblyInfo в корне проекта.
Для проекта нужно добавить ссылки на библиотеку System.ComponentModel.Composition
.
И ссылку на библиотеку ThinkingHome.Core.Plugins, в которой содержатся базовые классы для плагинов. Зависимости от других плагинов подключаются аналогичным образом.
После этого нужно пометить класс плагина атрибутом [Plugin]
и унаследовать его от базового плагина «PluginBase
». Для заполнения списка используемых библиотек воспльзуемся автоматическим подключением необходимых библиотек C#
Для предотвращения конфликтов при сборке плагина нужно отключить копирование сторонних библиотек при сборке параметром CopyLocal = False
. Библиотекам, подключаемым только для этого плагина нужно, наоборот, нужно разрешить копирование в директорию сборки.
В нашем проекте все плагины собираются в директорию \build\Debug(Release)\ThinkingHome.PluginName
, и для соответствия правилам проекта нужно изменить путь сборки следующим образом как для режима Debug, так и для режима Release.
При необходимости в проект можно подключить библиотеки NLog и NHibernate. Для этого нужно вызвать управление пакетами NuGet для проекта и включить решение плагина в список решений, где библиотека установлена.
После установки этих библиотек и их зависимостей нужно им задать параметр CopyLocal = False
.
В результате должен получиться успешно собирающийся пустой проект плагина.
Также, для влития плагина в основную ветвь проекта нужно создать для него .nuspec файл по аналогии с остальными плагинами, выставить ему атрибут Copy to Output Directory = Copy Always
и собрать инсталлятор вызовом thinking-home/Setup/build-installer/build-msi.bat
.
При правильной конфигурации .nuspec файла инсталлятор должен собраться без ошибок.