加载 VSPackage
仅当需要 VSPackage 时,VSPackage 才会加载到 Visual Studio 中。 例如,当 Visual Studio 使用 VSPackage 实现的项目工厂或服务时,会加载 VSPackage。 此功能称为延迟加载,在可能的情况下使用此功能来提高性能。
注意
Visual Studio 可以确定某些 VSPackage 信息,例如 VSPackage 提供的命令,而无需加载 VSPackage。
VSPackage 可以设置为在特定用户界面(UI)上下文中自动加载,例如,打开解决方案时。 该 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 {. . .}
请参阅 UI 上下文列表及其 GUID 值的枚举字段 UIContextGuids80 。
在 Initialize 方法中设置断点。
生成 VSPackage 并开始调试。
加载解决方案或创建一个解决方案。
VSPackage 在断点加载并停止。
强制 VSPackage 加载
在某些情况下,VSPackage 可能需要强制加载另一个 VSPackage。 例如,轻型 VSPackage 可能会在 CMDUIContext 不可用的上下文中加载更大的 VSPackage。
可以使用该方法 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 通信。 请改用“使用 ”并提供服务 。