実行時におけるプロジェクトのサブタイプの確認

カスタム プロジェクトのサブタイプに依存する VSPackage には、サブタイプが存在しない場合にも正常に失敗するように、そのサブタイプを検索するロジックを含める必要があります。 次の手順は、指定されたサブタイプの有無を確認する方法を示しています。

サブタイプの有無を確認するには

  1. VSPackage に次のコードを追加して、プロジェクトとソリューション オブジェクトからプロジェクト階層を IVsHierarchy オブジェクトとして取得します。

    EnvDTE.DTE dte;
    dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE));
    
    EnvDTE.Project project;
    project = dte.Solution.Projects.Item(1);
    
    IVsSolution solution;
    solution = (IVsSolution)Package.GetGlobalService(typeof(SVsSolution));
    
    IVsHierarchy hierarchy;
    hierarchy = solution.GetProjectOfUniqueName(project.UniqueName);
    
    
  2. 階層を IVsAggregatableProjectCorrected インターフェイスにキャストします。

    IVsAggregatableProjectCorrected AP;
    AP = hierarchy as IVsAggregatableProjectCorrected;
    
    
  3. GetAggregateProjectTypeGuids を呼び出して、プロジェクト タイプの GUID の一覧を取得します。

    string projTypeGuids = AP.GetAggregateProjectTypeGuids().ToUpper();
    
    
  4. 指定されたサブタイプの GUID の一覧を確認します。

    // Replace the string "MyGUID" with the GUID of the subtype.
    string guidMySubtype = "MyGUID";
    if (projTypeGuids.IndexOf(guidMySubtype) > 0)
    {
        // The specified subtype is present.
    }