【发布时间】:2016-12-16 08:44:25
【问题描述】:
我有一个Project 实例,但我不明白如何找出项目类型/语言。具体来说,我需要检查一个 C/C++ 项目。
docs 似乎缺少。
之前,另一个人在我的开源 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);
但它不再适用于 VS 2017 RC。我很乐意摆脱这种运行时反射魔法和未键入的 object 和 dynamic 而不是 Project - 因此代码已经变得无法维护。
【问题讨论】:
-
envdte.project有Kind属性(msdn.microsoft.com/en-us/library/envdte.project.kind.aspx)。它是 GUID。PrjKind(msdn.microsoft.com/en-us/library/vslangproj.prjkind.aspx) 中有预定义的项目种类,但似乎没有 c/c++ 的属性。我猜你可以得到那个 GUID,它对于所有 c/c++ 项目都是一样的。 -
@AramKocharyan:我确实看到了
Kind,但没有可能的“种类”列表,也没有任何保证它在各种机器、安装和 VS 版本中确实是静态的...... -
@Violet-Giraffe:你解决了这个问题吗?如果问题仍然存在,请随时告诉我。
-
@ColeWu-MSFT:我相信你的回答会起作用,但我想在接受答案之前实际实施它。这需要对我的扩展进行相当仔细的重构。
标签: c# visual-studio visual-studio-extensions visual-studio-package