Поделиться через


Загрузка VSPackages

VSPackage загружается в Visual Studio только в том случае, если их функциональные возможности необходимы. Например, VSPackage загружается, когда Visual Studio использует фабрику проектов или службу, реализуемую VSPackage. Эта функция называется отложенной загрузкой, которая используется при возможности повышения производительности.

Замечание

Visual Studio может определить определенные сведения VSPackage, такие как команды, которые предлагает VSPackage, без загрузки VSPackage.

VsPackages можно задать для автоматической загрузки в определенном контексте пользовательского интерфейса, например при открытии решения. Атрибут ProvideAutoLoadAttribute задает этот контекст.

Автоматическая загрузка VSPackage в определенном контексте

  • Добавьте атрибут ProvideAutoLoad к атрибутам 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
    {. . .}
    

    См. перечисленные поля UIContextGuids80 для списка контекстов пользовательского интерфейса и их значений GUID.

  • Задайте точку останова в методе Initialize .

  • Создайте VSPackage и запустите отладку.

  • Загрузите решение или создайте его.

    VSPackage загружается и останавливается в точке останова.

Принудительная загрузка VSPackage

В некоторых случаях VSPackage должен принудительно загрузить другой VSPackage. Например, облегченный VSPackage может загрузить более крупный VSPackage в контексте, который не доступен как CMDUIContext.

Вы можете использовать метод LoadPackage, чтобы принудительно загрузить VSPackage.

  • Вставьте этот код в Initialize метод VSPackage, который заставляет другой 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);
    
    

    При инициализации VSPackage PackageToBeLoaded будет принудительно загружаться.

    Принудительная загрузка не должна использоваться для обмена данными VSPackage. Используйте использование и предоставление услуг вместо этого.