3

を開発しようとしていて、CustomControl内のファイルとフォルダーを列挙する必要がありますSolution。とにかくこれを行うことはありますか?

--編集: シナリオ: 実際には、指定されたクラスから継承されたクラスのみを列挙する単純なバインディング コントロールを作成しようとしています。ユーザーはクラスを選択して、関連するフォームのコントロールにバインドできますが、これを行うにはできませんでしたデザインモードで役立つものを見つけてください。それが、ソリューションのファイルとフォルダーを列挙するために私が求めていることです。

4

2 に答える 2

2

EnvDTEこれを行う最善の方法は、Visual Studio Extension APIのクラスを使用することだと思います。組み込みの良い例があります。マクロ エクスプローラーを開き、Utilities/ListProj に移動します。次に、右クリックして [編集] を選択し、Visual Basic でそれを実装するコードを表示します。これにより、C# でロジックを複製するのに十分な情報が得られるはずです (クラスとメソッドの名前は同じです)。

マクロ エクスプローラー

考え方は単純です -ProjectItems()メンバーを再帰的に列挙するだけです。各ノード自体がさらにProjectItems()メンバーを持つ場合があります

Dim project As Project
project = DTE.ActiveSolutionProjects(0)
ListProjAux(project.ProjectItems(), 0)

Sub ListProjAux(ByVal projectItems As EnvDTE.ProjectItems, ByVal level As Integer)
  Dim projectItem As EnvDTE.ProjectItem
  For Each projectItem In projectItems
    projectItems2 = projectItem.ProjectItems
       ListProjAux(projectItems2, level + 1)
  Next
End Sub

この例では null チェックの一部を省略していますが、それらは ListProj サンプルに含まれています。

于 2013-07-04T08:38:43.010 に答える
0

これは非常に簡単です。

はい、プロジェクトのソリューション ファイルのパスを取得し、その中のファイルを処理できます。

string solutionPath = Directory.GetParent(Environment.CurrentDirectory).Parent.FullName;
于 2013-07-04T06:19:58.627 に答える