3

VS2010でUMLシーケンス図のコマンド拡張機能を構築していますが、現在のソリューションで特定のインターフェイスを実装するタイプのリストが必要です。拡張機能からタイプおよびアセンブリ情報にアクセスするにはどうすればよいですか?これまでのところ、私の試みはすべて、VSが現在編集しているものではなく、元の拡張プロジェクトにロードされたアセンブリをリストしただけです。

4

1 に答える 1

5

linq を使用して検索を簡素化することで、最終的にたどり着いたソリューションを次に示します。

DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
var types = from Project project in dte.Solution.Projects
            from Reference reference in (References)project.Object.References
            where reference.Type == prjReferenceType.prjReferenceTypeAssembly
            from t in Assembly.LoadFile(reference.Path).GetTypes()
            where t != typeof(IInterface) && typeof(IInterface).IsAssignableFrom(t)
            select t;

このブロックは、現在開いているソリューションに含まれるすべてのプロジェクトを検索し、すべての参照を取得し、アセンブリであるプロジェクトを読み込み、インターフェイスを実装する型を検索します。

于 2011-07-11T13:10:38.883 に答える