Загрузка 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. Используйте вместо этого использование и предоставление служб .