Compartilhar via


Carregar VSPackages

VSPackages são carregados no Visual Studio somente quando sua funcionalidade é necessária. Por exemplo, um VSPackage é carregado quando o Visual Studio usa uma fábrica de projeto ou um serviço que o VSPackage implementa. Esse recurso é chamado de carregamento atrasado, que é usado sempre que possível para melhorar o desempenho.

Observação

Visual Studio pode determinar determinadas informações VSPackage, como os comandos que um VSPackage oferece, sem carregar o VSPackage.

Os VSPackages podem ser definidos para carregamento automático em um contexto específico de interface do usuário (UI), por exemplo, quando uma solução está aberta. O ProvideAutoLoadAttribute atributo define esse contexto.

Carregar automaticamente um VSPackage em um contexto específico

  • Adicione o ProvideAutoLoad atributo aos 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 os campos enumerados de UIContextGuids80 para obter uma lista dos contextos da interface do usuário e seus valores GUID.

  • Defina um ponto de interrupção no Initialize método.

  • Crie o VSPackage e inicie a depuração.

  • Carregue uma solução ou crie uma.

    O VSPackage carrega e pára no ponto de interrupção.

Forçar um VSPackage a carregar

Em algumas circunstâncias, um VSPackage pode ter que forçar outro VSPackage a ser carregado. Por exemplo, um VSPackage leve pode carregar um VSPackage maior em um contexto que não está disponível como um CMDUIContext.

Você pode usar o LoadPackage método para forçar um VSPackage a carregar.

  • Insira esse código no Initialize método do VSPackage que força outro VSPackage a carregar:

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

    Quando o VSPackage é inicializado, ele forçará PackageToBeLoaded a carregar.

    O carregamento forçado não deve ser usado para comunicação VSPackage. Em vez disso, use e forneça serviços .