Требования к разработке конвейера
Чтобы включить обнаружение и активацию сегментов конвейера и надстроек, они должны отвечать заданным требованиям в отношении область, атрибутов и структуры каталогов.
Сегменты конвейера и сборки
Надстройки, контракты и представления должны быть открытыми. Адаптеры и их конструкторы могут быть внутренними.
Как правило, сегменты конвейера содержатся в собственной сборке, однако в одной сборке можно сочетать следующие сегменты:
Представления главного узла сборок и представления сборок.
Адаптеры главного узла и адаптеры надстройки.
Адаптеры узла и надстройки можно сочетать в одной сборке только в том случае, если в той же сборке сочетаются соответствующие представления.
При сочетании сегмента с одной стороны конвейера с соответствующим сегментом с другой стороны конвейера, например представлений главного узла надстроек с представлениями надстроек, необходимо развернуть сборку в обеих концах конвейера для данного сегмента.
Если сочетание представлений в той же сборке отсутствует, в одной сборке можно сочетать главный узел с представлением главного узла сборки.
Требования к атрибутам
Перечисленных ниже сегменты конвейера требуют применения атрибутов для определяющих их классов.
Для надстроек требуется атрибут AddInAttribute.
Для контрактов требуется атрибут AddInContractAttribute.
Для представлений надстроек требуется атрибут AddInBaseAttribute.
Для адаптеров надстроек требуется атрибут AddInAdapterAttribute.
Для адаптеров главного узла требуется атрибут HostAdapterAttribute.
Для представления сегмента конвейера надстройки в основном приложении не требуется атрибут, поскольку этот объект передается в метод AddInStore.FindAddIns(Type, String, String>) и не требует обнаружения.
На следующем ниже рисунке показаны сегменты конвейера с требуемыми атрибутами.
Модель надстройки с обязательными атрибутами для типов
Требования к каталогу конвейеров
Чтобы использовать в .NET Framework обнаружение сегментов конвейера и активацию надстроек, необходимо поместить сегменты конвейера в заданный каталог. Имена каталогов являются обязательными, однако в них не учитывается регистр. К именам, которые не требуется задавать, относятся только имя корневого каталога конвейера (которое передается в методы обнаружения) и имена вложенных каталогов, которые содержат надстройки. Все заданные имена сегментов должны представлять собой вложенные каталоги одного уровня, расположенные в корне конвейера.
На следующем ниже рисунке показаны эти требования к каталогам.
Обязательные каталоги для разработки надстроек
В следующей таблице описывается структура обязательных каталогов.
Каталог |
Описание |
---|---|
Корневой каталог конвейера |
Каталог, содержащий вложенные каталоги сегментов конвейера. Для этого каталога не требуется указывать имя, он может находиться в любом местоположении. Пример: ..\Pipeline |
AddIns |
Необязательный. Каталог, содержащий один или несколько вложенных каталогов, каждый из которых содержит отдельную надстройку. Этот каталог должен иметь имя AddIns. Пример: ..\Pipeline\AddIns Надстройки могут находиться в других расположениях системы. |
AddInSideAdapters |
Каталог, содержащий сборку адаптеров надстроек. Этот каталог должен иметь имя AddInSideAdapters. Пример: ..\Pipeline\AddInSideAdapters |
AddInViews |
Каталог, содержащий сборку представлений надстроек. Этот каталог должен иметь имя AddInViews. Пример: ..\Pipeline\AddInViews |
Contracts |
Каталог, содержащий сборку контрактов. Этот каталог должен иметь имя Contracts. Пример: ..\Pipeline\Contracts |
HostSideAdapters |
Каталог, содержащий сборку адаптеров главного узла. Этот каталог должен иметь имя HostSideAdapters. Пример: ..\Pipeline\HostSideAdapters |
У методов AddInStore.Update и AddInStore.Rebuild имеются перегруженные версии, принимающие строковую переменную с корневым каталогом конвейера или значение PipelineStoreLocation. Эти методы выявляют доступные надстройки и сегменты каталога в системе и кэшируют свои данные в информационном хранилище. Дополнительные сведения о методах обнаружения см. в разделе Обнаружение надстройки.
Основное приложение и представление главного узла сегмента конвейера надстройки обычно развертываются в одном и том же каталоге, который может находиться в любом местоположении. Для основного приложения требуется ссылка на представление главного узла сегмента надстройки, который представляет надстройку для активации.
Конвейер может находиться в любом местоположении, в том числе в структуре каталогов решения Visual Studio. Необходимо скопировать сегменты конвейера в соответствующие каталоги конвейера. Каталог конвейера вместе со своими вложенными каталогами предназначены для размещения нескольких конвейеров. Дополнительные сведения о различных сценариях работы с конвейерами см. в разделе Сценарии конвейера надстройки.
Надстройки в других расположениях
Не требуется размещать надстройки в структуре каталогов конвейера. Если они не находятся в структуре каталогов конвейера, необходимо вызвать метод AddInStore.UpdateAddIns или RebuildAddIns, которые принимают в качестве параметра путь к каталогу, содержащему надстройки.
В дополнение к этому при вызове метода AddInStore.FindAddIns необходимо вызвать параметр addInPaths.
Если в основное приложение переданы полные имена типов его надстроек и пути к ним, можно воспользоваться методом FindAddIn, чтобы найти конкретную оснастку, что позволяет избежать запросов к структуре каталогов конвейера. Тем не менее структура каталогов конвейера является обязательной.
Ссылки на сегменты конвейера в Visual Studio
При добавлении в проект ссылки на другой сегмент конвейера, например адаптер надстройки, для которого требуется ссылка на этот сегмент контракта, следует добавить ссылку на проект этого сегмента, а не на его сборку. В следующем примере ссылка указывает на проект контракта. Ссылка на проект не позволяет развертывать в конвейере сборки, на которые указывают ссылки, что может привести к конфликтам. На предотвращение конфликтов также ориентируется отсутствие локального копирования файлов.
Чтобы добавить ссылку проекта
В Обозревателе решений щелкните правой кнопкой мыши папку Ссылки и выберите команду Добавить ссылку.
На вкладке Проекты выберите нужный проект и нажмите кнопку ОК.
В папке Ссылки щелкните только что добавленную ссылку на проект.
В поле ссылки Свойства установите для параметра Копировать локально значение False.
Обязательные ссылки
В следующей ниже таблице перечислены сегменты конвейера, для которых требуются ссылки сборок на библиотеки System.AddIn.dll и System.Contract.dll. Для ряда сегментов также требуются ссылки на другие скомпилированные сегменты.
Сегмент конвейера |
Ссылки на сборку и проект |
Ссылки на пространство имен и тип |
---|---|---|
Контракт |
System.AddIn.dll System.AddIn.Contract.dll |
System.AddIn.Pipeline System.AddIn.Contract |
Представление надстройки |
System.AddIn.dll |
System.AddIn.Pipeline |
Адаптер надстройки |
System.AddIn.dll System.AddIn.Contract.dll Сегмент представления надстройки Сегмент контракта |
System.AddIn.Pipeline |
Адаптер основного приложения |
System.AddIn.dll System.AddIn.Contract.dll Сегмент представления главного узла Сегмент контракта |
System.AddIn.Pipeline |
Основное приложение |
System.AddIn.dll Сегмент представления главного узла |
System.AddIn.Hosting представление главного узла |
Надстройка |
System.AddIn.dll Сегмент представления надстройки |
System.AddIn представление надстройки |
Представление главного узла надстройки не предъявляет требований в отношении ссылок, однако оно является обязательным для основного приложения разработки.
Развертывание в конвейер в Visual Studio
В Visual Studio можно построить сегменты конвейера в структуру каталогов конвейера путем изменения пути к выходному файлу.
Чтобы выполнить развертывание в конвейер в Visual Studio
В меню Сервис выберите команду Свойства для проекта и перейдите на вкладку Построение.
Измените значение параметра Путь к выходному файлу для сегментов конвейера на соответствующие каталоги в структуре каталогов конвейера.
Как правило, основное приложение и представление главного узла развертываются в одном каталоге. Каталог конвейера может находиться в любом местоположении, однако обычно он содержится в том же каталоге, что и основное приложение.