3

その下にあるプロジェクトとフォルダーのリストを取得しようとしています。以下を使用して、プロジェクトとプロジェクト項目を取得できます。

DTE2 dte2;
dte2=(DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
Projects projects = dte2.Solution.Projects;

次に、プロジェクト アイテムを繰り返し処理し、アイテムの「種類」を取得します。ただし、GUID のみが表示されます。アイテムがフォルダーかどうかを知る必要があります。それ、どうやったら出来るの?

参照:

var item = projects.GetEnumerator();
while (item.MoveNext())
{
  var project = item.Current as Project;
  for(i=1;i<project.ProjectItems.Count;i++)
  {
     string itemType = project.ProjectItems.Item(i).Kind;
  }
}

編集 :

現在、回避策を使用しています:

string location = project.ProjectItems.Item(i).get_FileNames(1);
if (location.EndsWith(@"\"))
        {
            // It is a folder E.g C:\\Abc\\Xyz\\
        }
4

2 に答える 2

4

ProjectKinds.vsProjectKindSolutionFolderプロジェクトがフォルダーかどうかを確認するために使用できます。

例えば

var item = projects.GetEnumerator();
while (item.MoveNext())
{
  var project = item.Current as Project;
  for(i=1;i<project.ProjectItems.Count;i++)
  {
     string itemType = project.ProjectItems.Item(i).Kind;
     if (itemType  == ProjectKinds.vsProjectKindSolutionFolder)
     {
         // Do whatever
     }
  }
}

編集:私のコメントで述べたように、投稿した後、上記は ProjectItem.Kind ではなく Project.Kind である SolutionFolders 用であることに気付きました。GUIDS に関して、マイクロソフトは次のように述べています。

Project または ProjectItem の Kind プロパティは、列挙値を返しません (.NET は、サード パーティが提供するプロジェクトの種類に対応する必要があるため)。したがって、Kind プロパティは、種類を識別する一意の GUID 文字列を返します。拡張性モデルは、これらの GUID の一部をいくつかのアセンブリとクラス (EnvDTE.Constants、VSLangProj.PrjKind、VSLangProj2.PrjKind2 など) に分散して提供しますが、値を推測してハードコーディングする必要がある場合もあります。

http://support.microsoft.com/kb/555561から。コメントで述べたように、「Folder」という種類の ProjectItem の GUID が全面的に同じであることを願っています。この GUID を特定してハードコーディングするだけです。

于 2013-01-12T08:03:45.920 に答える