在运行时验证项目的子类型
依赖于自定义项目子类型的 VSPackage 应包含要查找该子类型的逻辑,以便在子类型不存在时可以正常失败。 以下过程演示如何验证是否存在指定的子类型。
验证子类型是否存在
通过将以下代码添加到 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);
将层次结构强制转换为 IVsAggregatableProjectCorrected 接口。
IVsAggregatableProjectCorrected AP; AP = hierarchy as IVsAggregatableProjectCorrected;
通过调用 GetAggregateProjectTypeGuids.. 获取项目类型 GUID 的列表。
string projTypeGuids = AP.GetAggregateProjectTypeGuids().ToUpper();
检查指定子类型的 GUID 列表。
// Replace the string "MyGUID" with the GUID of the subtype. string guidMySubtype = "MyGUID"; if (projTypeGuids.IndexOf(guidMySubtype) > 0) { // The specified subtype is present. }