Share via


增益集探索

主應用程式會搜尋能夠使用的增益集, 可能進行的搜尋有下列兩項:

  • 將所有增益集和管線區段的相關資訊登錄至快取檔案中。

  • 搜尋快取,尋找增益集中指定的增益集主檢視。

根據應用程式而定,主機通常會在啟動、載入文件或使用者要求時探索增益集。 AddInStore 類別提供了執行這些工作的方法。

一旦發現增益集,您就可以啟動它們,如增益集啟動HOW TO:以不同的隔離和安全性層級啟動增益集中所述。

登錄增益集和管線區段

登錄的動作涉及檢查管線區段的屬性及建構管線相關資訊,以判斷增益集是否有效。 如需套用屬性至管線區段及建立管線目錄結構的詳細資訊,請參閱管線開發需求。 管線目錄結構可包含一個或多個管線。 這項資訊會在管線根目錄的兩個檔案中快取:PipelineSegments.store 和 AddIns.store。

用於登錄的方法會採用代表管線根路徑的字串變數,或 PipelineStoreLocation 列舉型別 (Enumeration) 的值。 如果之前尚未建立這些檔案,則方法會建立新的快取檔案。

方法會重建或更新快取檔案,如下表所述。

登錄方法

說明

Rebuild

重建管線區段快取,並且包含所有新增的部分。

如果增益集位於管線目錄結構內,則這個方法還會重建增益集快取。

RebuildAddIns

在指定位置重建增益集的增益集快取。 如果的增益集不在管線目錄結構內,請呼叫這個方法。

Update

以任何新增部分更新管線區段快取。

如果增益集位於管線目錄結構內,則這個方法還會更新增益集快取。

如果沒有新的管線區段或增益集,則這個方法只會驗證快取。

UpdateAddIns

在指定位置更新任何新增益集的增益集快取。 如果的增益集不在管線目錄結構內,請呼叫這個方法。

如果未安裝任何新的增益集,則這個方法只會驗證快取。

RebuildUpdate 方法多載會採用管線目錄結構的根目錄,或是來自 PipelineStoreLocation 列舉型別的值做為參數。

這些方法會使用反映 (Reflection) 專屬的載入取得資訊,而且不會執行增益集的程式碼或管線區段的程式碼。 快取的資訊會加上時間戳記,因此不會在更新期間重新計算。

快取檔案

呼叫登錄方法的結果會產生兩個快取檔案:

  • PipelineSegments.store

    這個檔案位於管線目錄結構的根目錄中。

  • AddIns.store

    這個檔案位於包含一個或多個增益集子目錄的目錄中。 這個目錄可能位於管線目錄結構內,或是其他位置。

尋找增益集

FindAddIns 方法會檢查存放區檔,尋找符合指定的增益集主檢視的所有增益集。 增益集的主檢視為抽象基底類別或介面,會描述主機和增益集使用的方法,如合約中所指定。 若要尋找註冊方法建立的快取檔案,這個方法會採用管線目錄結構的根目錄或來自 PipelineStoreLocation 列舉型別的值做為參數。

注意事項注意事項

只有在您確定已建置並更新存放區檔時才呼叫 FindAddIns,如此才能找到所有可用的增益集。

FindAddIns 方法會傳回語彙基元 (Token) 的 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);

請參閱

概念

增益集和擴充性

增益集啟動

管線開發需求

合約、檢視和配接器