5

新しい VS 2010 拡張パッケージを作成しました。これまでのところ、私がやりたいことは、ユーザーにボタンを押してもらい、リストビューにソリューションの内容全体を入力させることだけです。次のコードがあります。

EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");

foreach (Project project in dte.Solution.Projects)
{
    foreach(ProjectItem pi in project.ProjectItems)
    {
         listView1.Items.Add(pi.Name.ToString());
    }
}

これは機能しているように見えますが、実行時に起動される実験的なインスタンスではなく、パッケージを含むソリューションの内容がリストに入力されます。参照を間違ってインスタンス化していますか?

4

2 に答える 2

1

GetActiveObject メソッドは、呼び出し元の DTE ではなく、DTE の最初のプロセス インスタンスを返します。(Visual Studio 2010 上の Visual Studio SDK 2010 プロジェクトでは、F5 キーを押して実験的なハイブを実行すると失敗する場合があります)

詳細については、こちらこちらをご覧ください...

于 2011-10-02T22:57:39.567 に答える
0

いいえ - 必要なProjectItem.SubProjectものを得るために使用する必要があります...ソリューションの構造によっては、再帰が必要になる場合があります...これらすべてをうまく実行するサンプルコードについては、http://www.wwwlicious.com/2011/03を参照してください/envdte-getting-all-projects.html

于 2011-09-28T18:02:11.660 に答える