Laden von VSPackages
VSPackages werden nur dann in Visual Studio geladen, wenn ihre Funktionalität erforderlich ist. Beispielsweise wird ein VSPackage geladen, wenn Visual Studio eine Projektfactory oder einen Dienst verwendet, den vsPackage implementiert. Dieses Feature wird als verzögertes Laden bezeichnet, das immer wieder verwendet wird, um die Leistung zu verbessern.
Hinweis
Visual Studio kann bestimmte VSPackage-Informationen ermitteln, z. B. die Befehle, die ein VSPackage bietet, ohne das VSPackage-Element zu laden.
VSPackages können so festgelegt werden, dass das automatische Laden in einem bestimmten Benutzeroberflächenkontext erfolgt, z. B. wenn eine Lösung geöffnet ist. Das ProvideAutoLoadAttribute Attribut legt diesen Kontext fest.
Automatisches Laden eines VSPackage in einem bestimmten Kontext
Fügen Sie das
ProvideAutoLoad
Attribut zu den VSPackage-Attributen hinzu:[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 {. . .}
Eine Liste der UI-Kontexte und deren GUID-Werte finden Sie in den aufgezählten Feldern UIContextGuids80 .
Legen Sie einen Haltepunkt in der Initialize Methode fest.
Erstellen Sie vsPackage, und starten Sie das Debuggen.
Laden Sie eine Lösung, oder erstellen Sie eine Lösung.
Das VSPackage lädt und stoppt am Haltepunkt.
Erzwingen des Ladens eines VSPackage-Pakets
Unter bestimmten Umständen muss ein VSPackage erzwingen, dass ein anderes VSPackage geladen wird. Ein einfacher VSPackage kann z. B. ein größeres VSPackage in einem Kontext laden, der nicht als CMDUIContext verfügbar ist.
Mit der LoadPackage Methode können Sie erzwingen, dass ein VSPackage geladen wird.
Fügen Sie diesen Code in die Initialize Methode des VSPackage ein, die das Laden eines anderen VSPackage erzwingt:
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);
Wenn das VSPackage initialisiert wird, wird das Laden erzwungen
PackageToBeLoaded
.Erzwingen des Ladens sollte nicht für die VSPackage-Kommunikation verwendet werden. Verwenden Sie stattdessen "Verwenden und Bereitstellen von Diensten" .