Partager via


IVsExtensionManager.CreateExtension, méthode

méthode de fabrique d'extension.

Espace de noms :  Microsoft.VisualStudio.ExtensionManager
Assembly :  Microsoft.VisualStudio.ExtensionManager (dans Microsoft.VisualStudio.ExtensionManager.dll)

Syntaxe

'Déclaration
Function CreateExtension ( _
    extensionPath As String _
) As IExtension
IExtension CreateExtension(
    string extensionPath
)
IExtension^ CreateExtension(
    String^ extensionPath
)
abstract CreateExtension : 
        extensionPath:string -> IExtension
function CreateExtension(
    extensionPath : String
) : IExtension

Paramètres

  • extensionPath
    Type : String

    Chemin d'accès d'un fichier manifeste VSIX.

Valeur de retour

Type : Microsoft.VisualStudio.ExtensionManager.IExtension
L'objet d' IExtension qui contient les métadonnées dans le manifeste VSIX pour une extension.

Notes

Bien qu'il prend en charge API l'infrastructure de Gestionnaire d'extensions , nous recommandons que vous n'utilisez pas car il est soumise à la modification.

Exemples

L'exemple suivant utilise l' GetEnabledExtensionContentLocations pour obtenir les emplacements de toutes les extensions d'un type personnalisé particulier. Il utilise ensuite CreateExtension pour accéder aux autres métadonnées pour chaque extension trouvée et pour obtenir son nom. Une fois qu'il stocke des noms et des informations relatives au chemin d'accès, il crée des commandes de menu pour chaque extension.

// 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);
        }
    }
}

Sécurité .NET Framework

Voir aussi

Référence

IVsExtensionManager Interface

Microsoft.VisualStudio.ExtensionManager, espace de noms