6

インスタンスがあり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、このためにコードは既に保守できなくなっています。

4

2 に答える 2

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
                    }
                }
}
于 2016-12-19T07:00:52.040 に答える
2

上記のコメントで述べたように、EnvDTE.Project.Kind は最初に確認する場所です。HOWTO: アドインまたはマクロから Visual Studio プロジェクトの種類を推測するを参照してください。

いくつかのよく知られている GUID のリストがあります。INFO: List of known project type 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} が含まれているかどうかをテストします。

于 2016-12-19T07:31:27.400 に答える