Поделиться через


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

См. также

Ссылки

IVsExtensionManager Интерфейс

GetEnabledExtensionContentLocations - перегрузка

Microsoft.VisualStudio.ExtensionManager - пространство имен