如何确定EnvDTE.Project对象是否代表C/C++项目?

Vio*_*ffe 6 c# visual-studio visual-studio-extensions visual-studio-package

我有一个Project实例,我不明白如何找出项目类型/语言.具体来说,我需要检查一个C/C++项目.

文档似乎缺乏.

以前,另一个人在我的开源VS扩展中添加了以下一些魔法,它在VS2013-2015中有效:

private static bool isVisualCppProject(object project)
{
    Type projectObjectType = project.GetType();
    var projectInterface = projectObjectType.GetInterface("Microsoft.VisualStudio.VCProjectEngine.VCProject");
    return projectInterface != null;
}

   ...

isVisualCppProject(project.Object);
Run Code Online (Sandbox Code Playgroud)

但它不再适用于VS 2017 RC.而且我很乐意摆脱这种运行时反射魔法和un-typed objectdynamic不是Project- 因为这个代码已经变得不可维护了.

小智 2

您可以通过项目扩展名来确定项目类型,下面的演示供您参考。

    DTE2 dte = (DTE2)this.ServiceProvider.GetService(typeof(DTE));
            Solution2 solution = (Solution2)dte.Solution;

            foreach (Project p in solution.Projects)
            {

                string[] projectName = p.FullName.Split('.');

                if (projectName.Length > 1)
                {
                   string fileExt = projectName[projectName.Length-1];

                    if (fileExt == "vcxproj")
                    {
                        //is c/c++ porject
                    }
                }
}
Run Code Online (Sandbox Code Playgroud)