Обнаружение надстройки

Основные приложения могут обнаруживать доступные надстройки. Обнаружение состоит из двух задач:

  • Регистрация сведений обо всех надстройках и сегментах конвейера в файлах кэша.

  • Обнаружение надстроек для указанного представления основного приложения посредством поиска в кэше.

В зависимости от приложения основное приложение, как правило, обнаруживает надстройки при запуске, при загрузке документа или по запросу пользователя. Класс AddInStore предоставляет методы для выполнения этих задач.

После обнаружения надстроек, можно активировать их, как описано в разделах Активация надстройки и Практическое руководство. Активация надстроек с другими уровнями изоляции и безопасности.

Регистрация надстроек и сегментов конвейера

Регистрация включает определения допустимых надстроек путем проверки атрибутов сегментов конвейера и конструирования сведений о конвейерах этих надстроек. Дополнительные сведения о применении атрибутов к сегментам конвейера и создании структуры каталогов конвейера см. в разделе Требования к разработке конвейера. Структура каталогов конвейера может содержать один или несколько конвейеров. Эти сведения кэшируются в двух файлах в корневом каталоге конвейера: PipelineSegments.store и AddIns.store.

Методы, используемые для регистрации, принимают строковую переменную, которая представляет корневой путь конвейера или значение из перечисления PipelineStoreLocation. Они создают новые файлы кэша, если эти файлы еще не были созданы.

Эти методы перестраивают или обновляют файлы кэша, как показано в следующей таблице.

Метод регистрации

Описание

Rebuild

Перестраивает кэш сегментов конвейера и включает новые дополнения.

Данный метод так же перестраивает кэш надстроек если надстройки находятся в структуре каталогов конвейера.

RebuildAddIns

Перестраивает кэш надстройки для надстроек в указанном месте. Данный метод следует вызывать, если надстройки находятся вне структуры каталогов конвейера.

Update

Обновляет кэш сегментов конвейера новыми дополнениями.

Данный метод так же обновляет кэш надстроек, если надстройки находятся в структуре каталогов конвейера.

Если новые сегменты конвейера или надстройки отсутствуют, данный метод только проверяет кэш.

UpdateAddIns

Обновляет кэш надстройки для любых новых надстроек из указанного расположения. Данный метод следует вызывать, если надстройки находятся вне структуры каталогов конвейера.

Если новые надстройки не установлены, данный метод только проверяет кэш.

Перегрузки методов Rebuild и Update принимают в качестве параметра или корневой каталог в структуре каталогов конвейера, или значение из перечисления PipelineStoreLocation.

Эти методы используют загрузку, применимую только к отражению, для получения сведений и не выполняют код надстройки или код сегмента конвейера. Кэшированные сведения имеют временной штамп, поэтому они не вычисляются повторно во время обновления.

Файлы кэша

Результат вызова методов регистрации состоит из двух файлов кэша:

  • PipelineSegments.store

    Данный файл располагается в корневом каталоге структуры каталогов конвейера.

  • AddIns.store

    Данный файл располагается в каталоге, содержащем один или более подкаталогов надстройки. Этот каталог может находиться в структуре каталогов конвейера или в другом местоположении.

Обнаружение надстроек

Метод FindAddIns просматривает хранящиеся файлы для обнаружения всех надстроек, которые соответствуют указанному представлению основного приложения для надстройки. Представление основного приложения, относящееся к надстройке, является абстрактным базовым классом или интерфейсом, который описывает методы, используемые основным приложением и надстройкой, как указано в контракте. Чтобы обнаружить файлы кэша, созданные методами регистрации, этот метод принимает в качестве параметра или корневой каталог структуры каталогов конвейера, или значение из перечисления PipelineStoreLocation.

ПримечаниеПримечание

Вызывайте FindAddIns только после проверки создания и обновления хранящихся файлов, чтобы все доступные надстройки могли быть обнаружены.

Метод FindAddIns возвращает коллекцию IList<T>, которая состоит из маркеров, соответствующих каждой из доступных надстроек, имеющих допустимый конвейер. Каждый маркер описывается классом AddInToken.

В каждом маркере содержатся следующие сведения о надстройке, получаемые из атрибута AddInAttribute класса надстройки:

  • Имя

  • Описание

  • издатель;

  • Версия

В большинстве случаев коллекция IList<T> состоит только из одного маркера. Если маркеров в коллекции больше, хост-приложение может использовать эту информацию, чтобы позволить пользователю выбрать надстройку для активации. Дополнительные сведения об активации см. в разделе Активация надстройки.

Чтобы находить надстройки, расположенные за пределами структуры каталогов конвейера, необходимо включить параметр AddInPaths. Поскольку этот параметр представляет собой массив строк, он позволяет указывать более одного расположения.

Кроме того, можно находить конкретную надстройку, используя для этого метод FindAddIn, который возвращает коллекцию из одного маркера.

Пример

Ниже приведен пример построения файлов кэша и обнаружения надстроек.

' Get the path for the pipeline root.  
' Assumes that the current directory is the
' pipline directory structure root directory.
Dim pipeRoot As String = Environment.CurrentDirectory
' Update the cache files of the
' pipeline segments and add-ins.
Dim warnings() As String = AddInStore.Update(pipeRoot)
For Each warning As String In warnings
    Console.WriteLine(warning)
Next

' Search for add-ins of type Calculator (the host view of the add-in)
' specifying the host's application base, instead of a path,
' for the FindAddIns method.
Dim tokens As Collection(Of AddInToken) = _
    AddInStore.FindAddIns(GetType(Calculator), PipelineStoreLocation.ApplicationBase)
// Get path for the pipeline root.
// Assumes that the current directory is the  
// pipeline directory structure root directory. 
String pipeRoot = Environment.CurrentDirectory;

// Update the cache files of the
// pipeline segments and add-ins.
string[] warnings = AddInStore.Update(pipeRoot);

foreach (string warning in warnings)
{
    Console.WriteLine(warning);
}

// Search for add-ins of type Calculator (the host view of the add-in)
// specifying the host's application base, instead of a path,
// for the FindAddIns method.

Collection<AddInToken> tokens = 
            AddInStore.FindAddIns(typeof(Calculator),PipelineStoreLocation.ApplicationBase);

См. также

Основные понятия

Надстройки и расширения среды

Активация надстройки

Требования к разработке конвейера

Контракты, представления и адаптеры