Share via


Caricare pacchetti VSPackage

I pacchetti VSPackage vengono caricati in Visual Studio solo quando è necessaria la funzionalità. Ad esempio, un VSPackage viene caricato quando Visual Studio usa una factory di progetto o un servizio implementato dal pacchetto VSPackage. Questa funzionalità viene chiamata caricamento ritardato, che viene usato quando possibile per migliorare le prestazioni.

Nota

Visual Studio può determinare determinate informazioni vspackage, ad esempio i comandi offerti da un pacchetto VSPackage, senza caricare il pacchetto VSPackage.

I pacchetti VSPackage possono essere impostati per il caricamento automatico in un contesto dell'interfaccia utente specifico, ad esempio quando una soluzione è aperta. L'attributo ProvideAutoLoadAttribute imposta questo contesto.

Caricare automaticamente un pacchetto VSPackage in un contesto specifico

  • Aggiungere l'attributo ProvideAutoLoad agli attributi 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
    {. . .}
    

    Vedere i campi enumerati di UIContextGuids80 per un elenco dei contesti dell'interfaccia utente e dei relativi valori GUID.

  • Impostare un punto di interruzione nel Initialize metodo .

  • Compilare il pacchetto VSPackage e avviare il debug.

  • Caricare una soluzione o crearne una.

    Il pacchetto VSPackage carica e si arresta in corrispondenza del punto di interruzione.

Forzare il caricamento di un pacchetto VSPackage

In alcuni casi un VSPackage potrebbe dover forzare il caricamento di un altro VSPackage. Ad esempio, un VSPackage leggero potrebbe caricare un VSPackage più grande in un contesto non disponibile come CMDUIContext.

È possibile usare il LoadPackage metodo per forzare il caricamento di un VSPackage.

  • Inserire questo codice nel Initialize metodo del VSPackage che forza il caricamento di un altro VSPackage:

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

    Quando il pacchetto VSPackage viene inizializzato, forza PackageToBeLoaded il caricamento.

    Il caricamento forzato non deve essere usato per la comunicazione VSPackage. Usare e fornire servizi .