IVsExtensionManager.GetEnabledExtensionContentLocations 方法 (String, IDictionary<String, String>)
執行查詢,集合的特定的型別,會包含在已啟用擴充功能,並再篩選結果,藉由符合指定的屬性,以在內容節點的 XML 屬性的所有內容的路徑。
命名空間: Microsoft.VisualStudio.ExtensionManager
組件: Microsoft.VisualStudio.ExtensionManager (在 Microsoft.VisualStudio.ExtensionManager.dll 中)
語法
'宣告
Function GetEnabledExtensionContentLocations ( _
contentTypeName As String, _
attributes As IDictionary(Of String, String) _
) As IEnumerable(Of String)
IEnumerable<string> GetEnabledExtensionContentLocations(
string contentTypeName,
IDictionary<string, string> attributes
)
IEnumerable<String^>^ GetEnabledExtensionContentLocations(
String^ contentTypeName,
IDictionary<String^, String^>^ attributes
)
abstract GetEnabledExtensionContentLocations :
contentTypeName:string *
attributes:IDictionary<string, string> -> IEnumerable<string>
function GetEnabledExtensionContentLocations(
contentTypeName : String,
attributes : IDictionary<String, String>
) : IEnumerable<String>
參數
contentTypeName
類型:String若要篩選的搜尋內容的型別。
attributes
類型:IDictionary<String, String>以符合內容屬性。
傳回值
類型:IEnumerable<String>
一系列的擴充程式的路徑位置contentTypeName與相對應的子系內容包括副檔名的 VSIX 資訊清單中的項目和attributes符合該子項目的 XML 屬性。
備註
雖然這個 API 支援擴充管理員的基礎結構,建議您不要使用它因為它有可能變更。
範例
下列範例會使用GetEnabledExtensionContentLocations以取得特定的自訂型別的所有擴充功能的位置。 然後會使用CreateExtension來存取其他的中繼資料,如找到每個副檔名,並取得其名稱。 它會將儲存的名稱和路徑資訊之後,它會建立每一個擴充部份的功能表命令。
// This is the CommandID of the placeholder menu item,
// as defined in the .vsct file.
int CmdIdBase = 0x103;
// These lists will store name and path information.
private ArrayList SkinNames = new ArrayList();
private ArrayList SkinPaths = new ArrayList();
// Call this from Initialize().
private void InitSkinList()
{
var mcs = GetService(typeof(IMenuCommandService))
as OleMenuCommandService;
int counter = CmdIdBase;
// Get the Extension Manager service.
var ExtMgrSvc = GetService(typeof(SVsExtensionManager))
as IVsExtensionManager;
// Iterate through installed extensions.
var attributes = new Dictionary<string, string>();
attributes.Add("Type", "Skin");
foreach (string SkinPath
in ExtMgrSvc.GetEnabledExtensionContentLocations(
"CustomExtension", attributes))
{
// Store the name and path information.
SkinPaths.Add(SkinPath);
SkinNames.Add(ExtMgrSvc.CreateExtension(SkinPath).Header.Name);
// Create a CommandID for the new menu item.
var cmdID = new CommandID(
GuidList.guidVSSkinHostCmdSet, counter);
// Create the menu item and add its event handlers.
var mc = new OleMenuCommand(
new EventHandler(OnSkinExec), cmdID);
mc.BeforeQueryStatus += new EventHandler(OnSkinQueryStatus);
mcs.AddCommand(mc);
counter ++;
}
}
private void OnSkinQueryStatus(object sender, EventArgs e)
{
var menuCommand = sender as OleMenuCommand;
if (null != menuCommand)
{
// Determine which menu item was queried.
int skinIndex = menuCommand.CommandID.ID - this.CmdIdBase;
if (skinIndex >= 0 && skinIndex < this.SkinNames.Count)
{
// Set the text.
menuCommand.Text = this.SkinNames[skinIndex] as string;
}
}
}
private void OnSkinExec(object sender, EventArgs e)
{
var menuCommand = sender as OleMenuCommand;
if (null != menuCommand)
{
// Get the name of the skin from the menu item.
string skinName = menuCommand.Text;
// Locate the name in the list of skins.
int i = this.SkinNames.IndexOf(skinName);
// Get the corrsponding path.
var skinPath = SkinPaths[i] as string;
if (SkinNames.Count > 0)
{
if (File.Exists(skinPath) || Directory.Exists(skinPath))
{
// Put code here to apply the skin extension...
MessageBox.Show("Skin " + skinName + " found:\r\n"
+ skinPath + ". \r\n\r\nApplying skin...");
}
else MessageBox.Show("Could not find skin " + skinName);
}
}
}
.NET Framework 安全性
- 完全信任立即呼叫者。這個成員無法供部分信任的程式碼使用。如需詳細資訊,請參閱從部分受信任程式碼使用程式庫。