Udostępnij za pośrednictwem


Ładowanie pakietów VSPackage

Pakiety VSPackage są ładowane do programu Visual Studio tylko wtedy, gdy ich funkcjonalność jest wymagana. Na przykład pakiet VSPackage jest ładowany, gdy program Visual Studio używa fabryki projektu lub usługi implementowania pakietu VSPackage. Ta funkcja jest nazywana opóźnionym ładowaniem, która jest używana zawsze wtedy, gdy jest to możliwe, aby zwiększyć wydajność.

Uwaga

Program Visual Studio może określić pewne informacje o pakietach VSPackage, takie jak polecenia, które oferuje pakiet VSPackage, bez ładowania pakietu VSPackage.

Pakiety VSPackage można ustawić tak, aby automatycznie ładowały się w określonym kontekście interfejsu użytkownika, na przykład po otwarciu rozwiązania. Atrybut ProvideAutoLoadAttribute ustawia ten kontekst.

Automatyczne ładowanie pakietu VSPackage w określonym kontekście

  • ProvideAutoLoad Dodaj atrybut do atrybutów pakietu 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
    {. . .}
    

    Zobacz wyliczone pola UIContextGuids80 listy kontekstów interfejsu użytkownika i ich wartości identyfikatora GUID.

  • Ustaw punkt przerwania w metodzie Initialize .

  • Skompiluj pakiet VSPackage i rozpocznij debugowanie.

  • Załaduj rozwiązanie lub utwórz je.

    Pakiet VSPackage ładuje i zatrzymuje się w punkcie przerwania.

Wymuszanie załadowania pakietu VSPackage

W niektórych okolicznościach pakiet VSPackage może wymagać wymuszenia załadowania innego pakietu VSPackage. Na przykład lekki pakiet VSPackage może załadować większy pakiet VSPackage w kontekście, który nie jest dostępny jako CMDUIContext.

Możesz użyć LoadPackage metody , aby wymusić ładowanie pakietu VSPackage.

  • Wstaw ten kod do Initialize metody pakietu VSPackage, który wymusza załadowanie innego pakietu 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);
    
    

    Gdy pakiet VSPackage zostanie zainicjowany, wymusi PackageToBeLoaded załadowanie.

    Wymuszanie ładowania nie powinno być używane do komunikacji vsPackage. Zamiast tego użyj funkcji Użyj i zapewnij usługi .