Ł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 .