2

すべてが 1 つのソフトウェアに属するプロジェクトの 200 を超えるソリューション ファイルを含むフォルダー構造を想像してみてください。それらのほとんどは、独自のソリューションに含まれる他のプロジェクトで参照される共有ライブラリを生成します。

ソリューション エクスプローラーでこのような参照アセンブリを右クリックして、[ソリューションを開く] や [ソリューションを新しい Visual Studio インスタンスで開く] などのコンテキスト メニュー項目が表示される可能性があれば素晴らしいと思いませんか (このようなもの) )?

これを機能させるには、アドインを何らかのベース ディレクトリで構成する必要があります。そこから、利用可能なすべてのソリューション ファイルと含まれるプロジェクトのコレクションを作成する必要があります。参照を右クリックすると、対応する出力のプロジェクト ファイルがスキャンされ、見つかった場合は、対応するソリューションを直接開くためのメニュー項目が表示されます (この情報もプリフェッチされる可能性があります)。

ええと...あなたの誰かがすでにそのようなアドインを作成しましたか? すでにこのようなことを行うアドインを知っている人はいますか?

これらの質問のどちらにも「はい」と答えられない場合: 設定された前提条件に基づいてソリューション エクスプローラーのコンテキスト メニューを拡張する方法を教えてもらえますか?

4

1 に答える 1

0

VS MEF 拡張機能ではこれを行うことはできませんが、VS アドインを使用することはおそらくそれほど難しくありません。

  1. MZToolsサンプル/テンプレートを使用して、メニューを適切なコマンド バーに追加する部分を記述します (これは、ソリューション エクスプローラーのコマンドを含むコンテキスト メニュー ポップアップです)。私が夢中になったのはSolutionProject. というcommandBarもあると思いReferenceます。次のコードApplicationObjectは、EnvDTE必要なコマンド バーを検索するためのコードです。

        private void IterateAllCommandBars( )
    {
        var commandBars =(CommandBars)ApplicationObject.CommandBars;
        Debug.Indent( );
        foreach (CommandBar commandBar in commandBars)
        {
            Debug.WriteLine(commandBar.Name);
        }
        Debug.Unindent( );
    }
    
  2. 拡張機能が読み込まれると (通常は でOnStartupComplete)、前提条件を探して、参照をソリューション パスにマップするディクショナリを設定できます。

  3. アドインで呼び出される QueryStatus 呼び出しを使用して、選択されている参照に基づいてメニューを有効/無効にします。たとえば、選択したプロジェクトがあればそれを取得します。

    private static Project GetProject(DTE applicationObject)
    {
        if (applicationObject.Solution==null||applicationObject.Solution.Projects==null||applicationObject.Solution.Projects.Count<1)
            return null;
        if (applicationObject.SelectedItems.Count==1&&applicationObject.SelectedItems.Item(1).Project!=null)
            return applicationObject.SelectedItems.Item(1).Project;
        return null;
    }
    
  4. ユーザーが有効なオプションをクリックしたときに呼び出すコマンドを実行します。既存の VS インスタンスでソリューションを開く方法や可能性があるかどうかはわかりませんが、新しい VS で開くのは簡単です。Process.Start(ProjectFullPath);または、SolutionFullPath の可能性があります。

于 2010-08-24T14:05:36.427 に答える