仅在需要其功能时,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 {. . .}请参阅 UIContextGuids80 的枚举字段,获取 UI 上下文及其 GUID 值的列表。
在 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 通信。 请改用“使用并提供服务”。