Carga de VSPackages

Los VSPackages se cargan en Visual Studio solo cuando se requiere su funcionalidad. Por ejemplo, se carga un VSPackage cuando Visual Studio usa un generador de proyectos o un servicio que implementa VSPackage. Esta característica se denomina carga retrasada, que se usa siempre que sea posible para mejorar el rendimiento.

Nota:

Visual Studio puede determinar cierta información de VSPackage, como los comandos que ofrece un VSPackage, sin cargar vsPackage.

Los VSPackages se pueden establecer para cargar automáticamente en un contexto de interfaz de usuario (UI) determinado, por ejemplo, cuando se abre una solución. El ProvideAutoLoadAttribute atributo establece este contexto.

Cargar automáticamente un VSPackage en un contexto específico

  • Agregue el ProvideAutoLoad atributo a los atributos 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
    {. . .}
    

    Consulte los campos enumerados de UIContextGuids80 para obtener una lista de los contextos de la interfaz de usuario y sus valores GUID.

  • Establezca un punto de interrupción en el Initialize método .

  • Compile VSPackage e inicie la depuración.

  • Cargue una solución o cree una.

    VSPackage se carga y se detiene en el punto de interrupción.

Forzar una carga de VSPackage

En algunas circunstancias, un VSPackage puede tener que forzar que se cargue otro VSPackage. Por ejemplo, un VSPackage ligero podría cargar un VSPackage mayor en un contexto que no está disponible como CMDUIContext.

Puede usar el LoadPackage método para forzar que se cargue un VSPackage.

  • Inserte este código en el Initialize método de VSPackage que obliga a otro VSPackage a cargar:

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

    Cuando se inicializa VSPackage, se forzará PackageToBeLoaded a cargar.

    La carga forzada no debe usarse para la comunicación de VSPackage. Use Use y proporcione servicios en su lugar.