共用方式為


增益集探索

更新:2007 年 11 月

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

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

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

根據應用程式而定,主機通常會在啟動、載入文件或使用者要求時探索增益集。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)
If (warnings.Length > 0) Then
    For Each warning As String In warnings
        Console.WriteLine(warning)
    Next
End If
' 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);

if (warnings.Length > 0)
{
    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);

請參閱

概念

增益集啟動

管線開發需求

合約、檢視和配接器

其他資源

增益集和擴充性