[英]How to determine whether or not EnvDTE.Project object represents a C/C++ project?
我有一個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);
但它不再適用於VS 2017 RC。 我很樂意擺脫這個運行時反射魔術和非類型object
和dynamic
而不是Project
- 由於這個原因,代碼已經變得無法維護。
您可以通過項目擴展名來確定項目類型,以及以下演示供您參考。
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
}
}
}
如上面的評論所述,EnvDTE.Project.Kind是第一個看的地方。 請參閱HOWTO:從加載項或宏中猜測Visual Studio項目的類型
有一些眾所周知的GUID 列表 ,請參閱INFO:已知項目類型Guids的列表 。
您可能對{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}感興趣。 但是項目可能有各種子類型,在這種情況下會應用多個GUID。 例如MVC + C#。 請參閱HOWTO:從加載項獲取Visual Studio項目的項目風格(子類型)
EnvDTE.Project.Kind包含主項目類型,並不保證例如C ++ GUID將存儲在此屬性中。 最安全的方法是檢索應用於項目的所有GUID。 使用上一個鏈接中的GetProjectTypeGuids方法。 您將獲得所有GUID的列表,然后您將測試它是否包含{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.