增益集探索
主應用程式會搜尋能夠使用的增益集, 可能進行的搜尋有下列兩項:
將所有增益集和管線區段的相關資訊登錄至快取檔案中。
搜尋快取,尋找增益集中指定的增益集主檢視。
根據應用程式而定,主機通常會在啟動、載入文件或使用者要求時探索增益集。 AddInStore 類別提供了執行這些工作的方法。
一旦發現增益集,您就可以啟動它們,如增益集啟動和 HOW TO:以不同的隔離和安全性層級啟動增益集中所述。
登錄增益集和管線區段
登錄的動作涉及檢查管線區段的屬性及建構管線相關資訊,以判斷增益集是否有效。 如需套用屬性至管線區段及建立管線目錄結構的詳細資訊,請參閱管線開發需求。 管線目錄結構可包含一個或多個管線。 這項資訊會在管線根目錄的兩個檔案中快取:PipelineSegments.store 和 AddIns.store。
用於登錄的方法會採用代表管線根路徑的字串變數,或 PipelineStoreLocation 列舉型別 (Enumeration) 的值。 如果之前尚未建立這些檔案,則方法會建立新的快取檔案。
方法會重建或更新快取檔案,如下表所述。
登錄方法 |
說明 |
---|---|
重建管線區段快取,並且包含所有新增的部分。 如果增益集位於管線目錄結構內,則這個方法還會重建增益集快取。 |
|
在指定位置重建增益集的增益集快取。 如果的增益集不在管線目錄結構內,請呼叫這個方法。 |
|
以任何新增部分更新管線區段快取。 如果增益集位於管線目錄結構內,則這個方法還會更新增益集快取。 如果沒有新的管線區段或增益集,則這個方法只會驗證快取。 |
|
在指定位置更新任何新增益集的增益集快取。 如果的增益集不在管線目錄結構內,請呼叫這個方法。 如果未安裝任何新的增益集,則這個方法只會驗證快取。 |
Rebuild 和 Update 方法多載會採用管線目錄結構的根目錄,或是來自 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);