次の方法で共有


VSPackage を読み込む

VSPackage は、機能が必要な場合にのみ Visual Studio に読み込まれます。 たとえば、VSPackage は、VSPackage で実装されるプロジェクト ファクトリまたはサービスが Visual Studio で使用されるときに読み込まれます。 この機能は遅延読み込みと呼ばれ、パフォーマンス向上のために可能な場合は常に使用されます。

Note

Visual Studio では、VSPackage で提供されるコマンドなどの特定の VSPackage 情報を、VSPackage を読み込まずに確認できます。

VSPackage は、ソリューションを開いたときなど、特定のユーザー インターフェイス (UI) コンテキストで自動読み込みするように設定できます。 このコンテキストは ProvideAutoLoadAttribute 属性で設定されます。

特定のコンテキストで VSPackage を自動読み込みする

  • VSPackage 属性に ProvideAutoLoad 属性を追加します。

    [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 を強制的に読み込むことが必要な場合もあります。 たとえば、CMDUIContext として使用できないコンテキストで、軽量な VSPackage がより大きな VSPackage を読み込む場合があります。

LoadPackage メソッドを使用して、VSPackage を強制的に読み込むことができます。

  • 別の VSPackage を強制的に読み込む VSPackage の Initialize メソッドに、次のコードを挿入します。

    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 通信には強制読み込みを使用しないでください。 代わりに、サービスの使用および提供を使用してください。