Если необходимо ограничить список плагинов в папке, либо список плагинов не меняется от версии к версии, то лучше заранее создать файл со списком всех плагинов в папке и указать полное наименование класса в сборке, реализующий интерфейс IPlugin
.
Для выбора директорий с плагинами в отличии от корневой директории, желательно использовать аргумент коммандной строки SAL_Path
. При необходимости указания нескольких путей для поиска плагинов, необходимо разделить массив путей передаваемых в аргументе, символом «;»
В каждой папке указанной в аргументе, плагин ищет файл Plugins.List.xml
. В файле должен содержаться корневой узел Plugins
, в котором должен быть предоставлен массив элементов Plugin
. Каждый элемент Plugin, должен содержать 1 атрибут Assembly и массив дочерних элементов Instance
:
Assembly
— Наименование файла с расширением в текущей папкеInstance
— Полное наименование класса с пространством имён в файле, который реализует интерфейс IPlugin
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Plugins>
<Plugin Assembly="Kernel.Empty.dll">
<Instance>Kernel.Empty.PluginWindows</Instance>
</Plugin>
<Plugin Assembly="Plugin.Autorun.dll">
<Instance>Plugin.Autorun.PluginWindows</Instance>
</Plugin>
</Plugins>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Plugins" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attribute name="Assembly">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:element name="Plugins">
<xs:complexType>
<xs:sequence>
<xs:element name="Plugin" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Instance" minOccurs="1" maxOccurs="unbounded">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute ref="Assembly" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>