在运行时验证项目的子类型

依赖于自定义项目子类型的 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.
    }