Charger des VSPackages

Les VSPackages sont chargés dans Visual Studio uniquement lorsque leurs fonctionnalités sont requises. Par exemple, un VSPackage est chargé lorsque Visual Studio utilise une fabrique de projet ou un service que VSPackage implémente. Cette fonctionnalité est appelée chargement différé, qui est utilisé chaque fois que possible pour améliorer les performances.

Remarque

Visual Studio peut déterminer certaines informations VSPackage, telles que les commandes qu’offre un VSPackage, sans charger vsPackage.

Les VSPackages peuvent être définis sur le chargement automatique dans un contexte d’interface utilisateur particulier, par exemple lorsqu’une solution est ouverte. L’attribut ProvideAutoLoadAttribute définit ce contexte.

Charger automatiquement un VSPackage dans un contexte spécifique

  • Ajoutez l’attribut ProvideAutoLoad aux attributs VSPackage :

    [DefaultRegistryRoot(@"Software\Microsoft\VisualStudio\14.0")]
    [PackageRegistration(UseManagedResourcesOnly = true)]
    [ProvideAutoLoad(UIContextGuids80.SolutionExists)]
    [Guid("00000000-0000-0000-0000-000000000000")] // your specific package GUID
    public class MyAutoloadedPackage : Package
    {. . .}
    

    Consultez les champs énumérés d’une liste des contextes d’interface UIContextGuids80 utilisateur et de leurs valeurs GUID.

  • Définissez un point d’arrêt dans la Initialize méthode.

  • Générez vsPackage et démarrez le débogage.

  • Chargez une solution ou créez-en une.

    VsPackage charge et s’arrête au point d’arrêt.

Forcer le chargement d’un VSPackage

Dans certaines circonstances, un VSPackage peut avoir à forcer le chargement d’un autre VSPackage. Par exemple, un VSPackage léger peut charger un VSPackage plus volumineux dans un contexte qui n’est pas disponible en tant que CMDUIContext.

Vous pouvez utiliser la LoadPackage méthode pour forcer le chargement d’un VSPackage.

  • Insérez ce code dans la Initialize méthode de VSPackage qui force un autre VSPackage à charger :

    IVsShell shell = GetService(typeof(SVsShell)) as IVsShell;
    if (shell == null) return;
    
    IVsPackage package = null;
    Guid PackageToBeLoadedGuid =
        new Guid(Microsoft.PackageToBeLoaded.GuidList.guidPackageToBeLoadedPkgString);
    shell.LoadPackage(ref PackageToBeLoadedGuid, out package);
    
    

    Lorsque VSPackage est initialisé, il force PackageToBeLoaded le chargement.

    Le chargement forcé ne doit pas être utilisé pour la communication VSPackage. Utilisez et fournissez des services à la place.