加载 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 通信。 请改用“使用 ”并提供服务