Freigeben über


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