依存関係グラフ上のコード間での依存関係の対応付け
コード間の依存関係を理解するには、それらを Visual Studio Ultimate にマップします。 コード全体の依存関係を理解するには、コード マップを作成して視覚化します (Visual Studio Ultimate のみ)。 このことは、ファイルとコード行全体を読むことなく、コードの相関を確認するのに役立ちます。
ビデオ:
必要なもの:
ソリューションまたはアセンブリの Visual C# .NET コードまたは Visual Basic .NET コード (.dll または .exe)
Visual C++ プロジェクト、ヘッダー ファイル (.h または #include)、またはバイナリのネイティブまたはマネージ C コードまたは C++ コード
Visual Studio 2013 Update 3 (次の依存関係をマップするため)
複数のアプリでコードを共有するプロジェクト
Microsoft Dynamics AX の .NET モジュールから作られた X++ プロジェクトおよびアセンブリ
アセンブリおよびバイナリを Windows エクスプローラーから既存のグラフにドラッグし、関係を色分け表示することもできます。
開始するには、ここを参照してください。
ソリューション全体で全体的な依存関係を確認するには、[アーキテクチャ] メニューに移動します。 [依存関係グラフの生成]、[ソリューション] の順にクリックします。
または
ソリューションの特定の依存関係を確認するには、ソリューション エクスプローラーを開きます。 関心のあるプロジェクト、アセンブリ参照、フォルダー、ファイル、型、またはメンバーを選択します。 ソリューション エクスプローラーのツール バーの [新しいグラフ ドキュメントの作成] をクリックします。
さらに、次の操作を実行できます。
C および C++ のソース ファイルとヘッダー ファイルの間の依存関係を確認する
依存関係グラフを共有する
プログラムでグラフを作成する
全体的な依存関係の表示
ソリューション間の依存関係の表示
[アーキテクチャ] メニューで、[依存関係グラフの生成]、[ソリューション] の順にクリックします。
最上位レベル アセンブリとそれらのアセンブリ間の集約されたリンクを示すグラフを確認します。 集約リンクを広げると、表される依存関係が多くなります。 [外部] グループには、プラットフォームの依存関係など、ソリューションの外部のものがすべて含まれます。 外部アセンブリには、使用中の項目のみが表示されます。
アセンブリ内を確認するには、そのアセンブリを展開します。 マウス ポインターをアセンブリの上に移動し、シェブロン (^) が表示されたらクリックします。 (キーボード: 項目を選択し、正符号 (+) キーを押します)。さらに深いレベルのコードを確認するには、名前空間、型、およびメンバーに対して同じ操作を行います。
既定では、コンテインメント関係は、展開および折りたたむことができるグループとして表されます。 グループの関係をリンクとして表示するには、グラフのショートカット メニューで [グループ]、[グループ化の解除] の順にクリックします。
集約リンクによって表される項目と依存関係を調べるには、最初にリンクを選択して、そのショートカット メニューを開きます。 [表示]、[現在のダイアグラム内の寄与するリンク]、または [新しいダイアグラム内の寄与するリンク] をクリックします。
Visual Studio で、リンクの両端にグループが展開され、リンクに参加する項目と依存関係のみが表示されます。
項目またはリンクに関する詳細情報を確認するには、ポインターを項目の上に移動してツールヒントを表示します。 リンクが表すカテゴリが表示されます。
リンクの色の意味を表示するには、グラフ ツール バーの [凡例] をクリックします。
緑色のリンクが表示されている場合、単に継承関係の存在のみを示しているわけではない可能性があります。 メソッドの呼び出しも存在する場合がありますが、これらは継承関係によって非表示になっています。
各グループのメンバー間の依存関係を表示するには、グラフ上の項目をクリックします。
コード内の潜在的な問題を明らかにするには、アナライザーを実行します。
参照トピック
アセンブリまたはバイナリ間の依存関係の表示
空のグラフを作成するか、既存のグラフ (.dgml ファイル) を開きます。 Visual Studio の外部から、アセンブリまたはバイナリをグラフにドラッグします。
注意
エクスプローラーからアセンブリまたはバイナリをドラッグできるのは、エクスプローラーと Visual Studio を同じユーザー アクセス制御 (UAC: User Access Control) アクセス許可レベルで実行している場合のみです。たとえば、UAC がオンになっていて、Visual Studio を管理者として実行している場合、エクスプローラーはドラッグ操作をブロックします。この問題を回避するには、Visual Studio を管理者として実行していることを確認するか、UAC をオフにします。Windows 8 では、Windows エクスプローラーはエクスプローラーです。
空のグラフの作成
ソリューション エクスプローラーで、最上位のソリューション ノードのショートカット メニューを表示します。 [追加]、[新しい項目] の順にクリックします。
[インストール済み] の [全般] をクリックします。
右ペインで、[有向グラフのドキュメント] をクリックします。
空のグラフが作成され、現在のソリューションの Solution Items フォルダーに表示されます。
ソリューションに追加せずに新しい空のグラフを開くには、[ファイル] メニューの [新規作成] をクリックし、[ファイル] をクリックします。
空のグラフをモデリング プロジェクトに追加するには、[アーキテクチャ] メニューを開き、[新しい図] をクリックします。
Q & A
Q: グラフの作成に時間がかかるのはなぜですか。
A: グラフを初めて生成するときに、Visual Studio では、見つかったすべての依存関係にインデックスが付けられます。 このプロセスには、特に大規模なソリューションの場合、時間がかかることがありますが、以降のパフォーマンスは向上します。 コードが変更された場合、Visual Studio では、更新されたコードだけにインデックスが付け直されます。 グラフの生成が終了するまで待てない場合は、この手順をいつでも取り消して、代わりに次を試すことができます。
目的の依存関係のみをグラフ化します。
ソリューション全体のグラフを生成する前に、ソリューションのスコープを縮小します。
Visual Studio は 1 GB のメモリで実行できますが、Visual Studio でコード インデックスを作成してグラフを生成する際の大幅な遅延を避けるために、コンピューターには 2 GB 以上のメモリを搭載することをお勧めします。
プロジェクト項目の [出力ディレクトリにコピー] プロパティが [常にコピーする] に設定されている場合は、グラフを生成したり、ソリューション エクスプローラーから項目をグラフに追加したりするのにさらに時間がかかることがあります。 これにより、インクリメンタル ビルドと Visual Studio でプロジェクトが毎回リビルドされることになる問題が発生する場合があります。 パフォーマンスを向上させるには、このプロパティを [新しい場合はコピーする] または PreserveNewest に変更します。 「インクリメンタル ビルド」を参照してください。
Q: Visual Studio でグラフが作成されなかったのはなぜですか。
A: ソリューション内のプロジェクトのいずれも正常にビルドされなかった可能性があります。 Visual Studio では、1 つ以上のプロジェクトが正常にビルドされた場合にグラフが生成されます。 グラフには、正常にビルドされたコードに対してのみ依存関係が表示されます。 特定のコンポーネントにビルド エラーが発生すると、そのエラーがグラフに表示されます。 グラフに基づいてアーキテクチャを決定する前に、コンポーネントが実際にビルドされ、依存関係があることを確認してください。
特定の依存関係の表示
たとえば、保留中の変更があるいくつかのファイルでコード レビューを行うとします。 これらの変更の依存関係を表示するには、これらのファイルから依存関係グラフを作成します。
ソリューション内の特定の依存関係の表示
ソリューション エクスプローラーを開きます。 関心のあるプロジェクト、アセンブリ参照、フォルダー、ファイル、型、およびメンバーを選択します。
項目とそのメンバーをグラフ化します。 ソリューション エクスプローラーのツール バーの [新しいグラフ ドキュメントの作成] をクリックします。
型またはメンバーの依存関係を持つ項目を探すには、ソリューション エクスプローラーから型またはメンバーのショートカット メニューを開きます。 依存関係の種類をクリックします。 次に、結果を選択します。
項目と共に親の階層を含めるには、ソリューション エクスプローラー ツール バーで [新しいグラフ ドキュメントの作成] ボックスの一覧を開きます。 [先祖を持つ新しい依存関係グラフ] をクリックします。
また、空または既存のグラフに項目をドラッグできます。 空のグラフを作成するには、[ファイル] メニューで [新規作成]、[ファイル]、[有向グラフのドキュメント] の順にクリックします。 項目の親の階層を含めるには、Ctrl キーを押しながら項目をドラッグします。
注意
Windows Phone または Windows ストアなどの複数のアプリで共有されるプロジェクトから項目を追加すると、その項目は、現在アクティブなアプリ プロジェクトと共にマップに表示されます。コンテキストを別のアプリ プロジェクトに変更し、共有プロジェクトからさらに項目を追加した場合、その項目は、新しくアクティブになったアプリ プロジェクトと共に表示されます。マップ上の項目に実行する操作は、同じコンテキストを共有する項目にのみ適用されます。
項目を確認するには、その項目を展開します。 マウス ポインターを項目の上に移動し、シェブロン (^) ボタンが表示されたらクリックします。 すべての項目を展開するには、グラフのショートカット メニューを開きます。 [グループ]、[すべて展開] の順にクリックします。
注意
すべてのグループを展開することで使用できないグラフやメモリの問題が発生する場合、このオプションは使用できません。
コードにはあるもののグラフには表示されないメンバーを表示するには、[子の再フェッチ] をクリックします。 これらのグループ メンバーは、異なるスタイルで表示されるため、見やすくなっています。 「依存関係グラフの編集およびカスタマイズ」を参照してください。
これらのメンバーに関連する他の項目をグラフに表示するには、その項目のショートカット メニューを開きます。 [表示] および必要な関係の種類をクリックします。
アセンブリの場合、次のようにクリックします。
参照アセンブリ
このアセンブリの参照先のアセンブリを追加します。 外部アセンブリは [外部] グループに表示されます。
参照元のアセンブリ
このアセンブリを参照するソリューション内のアセンブリを追加します。
クラスの場合、次のようにクリックします。
基本型
クラスの場合、基底クラスおよび実装されたインターフェイスを追加します。
インターフェイスの場合、基本インターフェイスを追加します。
派生型
クラスの場合、派生クラスを追加します。
インターフェイスの場合、派生インターフェイスと、実装するクラスまたは構造体を追加します。
すべての基本型
基底クラスまたはインターフェイス階層を再帰的に追加します。
すべての派生型
クラスの場合、すべての派生クラスを再帰的に追加します。
インターフェイスの場合、すべての派生インターフェイスと、実装するクラスまたは構造体を再帰的に追加します。
コンテインメント階層
親コンテナーの階層を追加します。
使用された型
すべてのクラスと、このクラスが使用するメンバーを追加します。
使用元の型
すべてのクラスと、このクラスを使用するメンバーを追加します。
メソッドの場合、次のようにクリックします。
コンテインメント階層
親コンテナーの階層を追加します。
呼び出されたメソッド
このメソッドが呼び出すメソッドを追加します。
呼び出し元のメソッド
このメソッドを呼び出すメソッドを追加します。
基本型のオーバーライドされたメソッド
他のメソッドをオーバーライドするか、インターフェイスのメソッドを実装するメソッドの場合、オーバーライドされた基底クラスのすべての抽象メソッドまたは仮想メソッド、および実装されたインターフェイスのメソッドがある場合はそのメソッドを追加します。
参照されたフィールド
このメソッドが参照するフィールドを追加します。
フィールドの場合、次のようにクリックします。
コンテインメント階層
親コンテナーの階層を追加します。
参照元のメソッド
このフィールドを参照するメソッドを追加します。
アセンブリまたはバイナリの特定の依存関係の表示
[アーキテクチャ] メニューで [ウィンドウ]、[アーキテクチャ エクスプローラー] の順にクリックします。
最初の列の [ファイル システム] で [ファイルの選択] をクリックします。
[開く] ボックスで、アセンブリまたはバイナリを見つけて選択します。 [開く] をクリックして、選択したアセンブリまたはバイナリをアーキテクチャ エクスプローラーの次の列に追加します。
次の列で、アセンブリまたはバイナリを選択します。
既定では、次の列には選択した項目に含まれている項目が示されます。
ヒント
その他の関係項目を選択するには、列の右側で折りたたまれた列を選択して展開します。[ノード ナビゲーション] で、目的の種類の項目を選択します。[アウトバウンド ナビゲーション] または [インバウンド ナビゲーション] で、目的の関係の種類を選択します。「アーキテクチャ エクスプローラーを使用したコードの検索」を参照してください。
グラフに配置するすべての項目を見つけて選択します。
新しいグラフを作成するには、アーキテクチャ エクスプローラーのツール バーの [選択したすべてのノードから、新しいグラフ ドキュメントを作成します] をクリックします。
または
選択内容をグラフに追加するには、次の手順を実行します。
グラフの .dgml ファイルを開くか、空のグラフを作成します。
アーキテクチャ エクスプローラーのツール バーの [選択したすべてのノードを、現在表示されているグラフ ドキュメントに追加します] をクリックします。
または
アーキテクチャ エクスプローラーから項目をグラフにドラッグします。
C および C++ のソース ファイルとヘッダー ファイルの間の依存関係の表示
C++ プロジェクトのより完全なグラフを作成する場合は、そのプロジェクトに対してブラウザー情報のコンパイラ オプション (/FR) を設定します。 「/FR、/Fr (.sbr ファイルの作成)」を参照してください。 設定されていない場合は、メッセージが表示され、このオプションを設定することが求められます。 [OK] を選択した場合、このオプションは現在のグラフに対してのみ設定されます。 以後のすべてのグラフについて、メッセージを非表示にするように選択できます。 このメッセージを非表示にしても、再び表示されるようにできます。 次のレジストリ キーを 0 に設定するか、削除します。
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\NativeProvider : AutoEnableSbr
Visual C++ のプロジェクトを含むソリューションを開くときは、IntelliSense データベースの更新に時間がかかる場合があります。 この間は、IntelliSense データベースの更新が終了するまで、ヘッダー (.h または #include) ファイルの依存関係グラフを生成できない場合があります。 更新の進行状況は、Visual Studio のステータス バーで監視できます。 IntelliSense の特定の設定が無効になっているために表示される問題またはメッセージを解決するには、「C および C++ コードのグラフのトラブルシューティング」を参照してください。
ソリューションのすべてのソース ファイルとヘッダー ファイル間の依存関係を表示するには、[アーキテクチャ] メニューで [依存関係グラフの生成]、[インクルード ファイルの場合] の順にクリックします。
現在開いているファイルと関連するソース ファイルおよびヘッダー ファイルとの間の依存関係を表示するには、そのソース ファイルまたはヘッダー ファイルを開きます。 ファイル内の任意の場所でファイル ショートカット メニューを開きます。 [インクルード ファイルのグラフを生成] をクリックします。
C および C++ コードのグラフのトラブルシューティング
これらの項目は C および C++ コードではサポートされていません。
基本型は、親の階層を含むグラフには表示されません。
表示メニューのほとんどの項目は、C および C++ コードでは使用できません。
C および C++ のコードの依存関係グラフを生成するときに、次の問題が発生する場合があります。
懸案事項 |
原因 |
解決策 |
---|---|---|
依存関係グラフを生成できない。 |
ソリューション内のプロジェクトが正常にビルドされませんでした。 |
発生したビルド エラーを修正してから、グラフを再生成します。 |
[アーキテクチャ] メニューから依存関係グラフを生成しようとすると、Visual Studio が応答しなくなる。 |
プログラム データベース (.pdb) ファイルが壊れている可能性があります。 .pdb ファイルには、型、メソッド、ソース ファイル情報などのデバッグ情報が格納されます。 |
ソリューションをリビルドしてから、もう一度実行します。 |
IntelliSense 参照データベースの特定の設定が無効になる。 |
IntelliSense の特定の設定が、Visual Studio の [オプション] ダイアログ ボックスで無効になっている可能性があります。 |
設定をオンにして有効にします。 「[オプション]、[テキスト エディター]、[C/C++]、[詳細]」を参照してください。 |
"不明なメソッド" という内容のメッセージがメソッド ノードで表示される。 この問題は、メソッドの名前を解決できないために発生します。 |
バイナリ ファイルにベース再配置テーブルがない可能性があります。 |
リンカーで /FIXED:NO オプションをオンにします。 「/FIXED (固定ベース アドレス)」を参照してください。 |
プログラム データベース (.pdb) ファイルがビルドされていない可能性があります。 .pdb ファイルには、型、メソッド、ソース ファイル情報などのデバッグ情報が格納されます。 |
リンカーで /DEBUG オプションをオンにします。 「/DEBUG (デバッグ情報の生成)」を参照してください。 |
|
予想される場所で .pdb ファイルを開くことができないか、ファイルが見つかりません。 |
.pdb ファイルが予想される場所にあることを確認します。 |
|
デバッグ情報が .pdb ファイルから取り除かれています。 |
/PDBSTRIPED オプションをリンカーで使用した場合は、代わりに完全な .pdb ファイルを使用します。 「/PDBSTRIPPED (プライベート シンボルの除去)」を参照してください。 |
|
呼び出し元が関数ではなく、バイナリ ファイル内のサンクまたはデータ セクション内のポインターです。 |
呼び出し元がサンクの場合は、_declspec(dllimport) を使用してサンクの回避を試みます。 参照トピック |
依存関係グラフを共有する
グラフを他の Visual Studio のユーザーと共有する
グラフを保存するには、[ファイル] メニューを使用します。
または
グラフを特定のプロジェクトの一部として保存するには、グラフのショートカット メニューを開きます。 [ <DependencyGraphName.dgml> の移動先] をクリックし、グラフの保存先となるプロジェクトを選択します。
Visual Studio では、他の Visual Studio Ultimate、Visual Studio Premium、および Visual Studio Professional のユーザーと共有できる .dgml ファイルとしてグラフが保存されます。
注意
Visual Studio Premium または Visual Studio Professional を使用するユーザーとグラフを共有する前に、グループを展開しておくこと、非表示のノードとグループ間リンクを表示しておくこと、他のユーザーがグラフに表示できるようにする必要がある削除済みのノードを確認しておくことが必要です。そうしない場合、他のユーザーはそれらの項目を表示できなくなります。
モデリング プロジェクト内のグラフまたはモデリング プロジェクトから別の場所にコピーされたグラフを保存すると、次のエラーが発生する可能性があります。
プロジェクト ディレクトリの外部で fileName を保存できません。リンクされた項目はサポートされていません。"
Visual Studio にはエラーが表示されます。ただし、保存したバージョンは生成されます。このエラーを回避するには、モデリング プロジェクトの外部でグラフを生成します。その後、目的の場所にグラフを保存できます。単にソリューション内の別の場所にファイルをコピーし、その後で保存しようとすると失敗します。
Microsoft Word や PowerPoint などの他のアプリケーションにコピーできるように、グラフをイメージとしてエクスポートする
グラフのショートカット メニューを開きます。 [編集]、[イメージのコピー] の順にクリックします。
そのイメージを他のアプリケーションに貼り付けます。
Internet Explorer と同様に XML ビューアーや XAML ビューアーで表示できるように、グラフを XPS ファイルとしてエクスポートする
グラフのショートカット メニューを開きます。 [XPS として保存] をクリックします。
ファイルを保存する場所を参照します。
グラフに名前を付けます。 [保存の種類] ボックスが [XPS ファイル (*.xps)] に設定されていることを確認します。 [保存] をクリックします。
プログラムでグラフを作成する
バッチの処理中に作業できるようにグラフ ドキュメント (.dgml ファイル) を作成するには、GraphCmd.exe コマンド ライン ツールを実行します。 たとえば、ビルド間で変更された依存関係を検索するには、各ビルドの後にツールを実行します。 このツールは、C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE フォルダー内にあります。
GraphCmd.exe は .NET コードのみをサポートし、アセンブリまたは .dgml ファイルの依存関係情報のみを生成します。Visual Studio ソリューションのソース コードまたはプロジェクト ファイルの依存関係情報は生成されません。 GraphCmd.exe は Visual Studio の外部で実行されるため、DGQL クエリの処理のサポートは制限されます。
GraphCmd.exe の構文を次に示します。
GraphCmd -? -all -exceptions -input File_Name -query File_Name -exec "DGQL_Statement" -output File_Name -path alias=path
GraphCmd.exe のオプションは次のとおりです。
-input、-query、-exec、-path の各オプションは、複数回指定できます。
-? |
GraphCmd.exe に関するヘルプを表示します。 |
-all |
最終のノード セットだけでなく、すべてのクエリの中間結果を含めます。 |
-exceptions |
クエリの例外をグラフ ドキュメント (.dgml) ファイルとして報告します。 |
-input File_Name |
指定された .dgml ファイルを処理します。 これは、サイズが大きい .dgml ファイルの後処理およびフィルター処理に役立ちます。これにより、Visual Studio で .dgml ファイルを簡単に視覚化できます。 |
-query File_Name |
指定された Directed Graph Query Language (DGQL または .dgql) ファイルを実行します。 参照トピック
|
-exec "DGQL_Statement" |
指定された DGQL ステートメントを実行します。 「Directed Graph Query Language (DGQL) について」を参照してください。 |
-output File_Name |
指定された .dgml ファイルを出力します。 |
-path alias=path |
DGML ドキュメントの入出力で使用する新しいエイリアスを指定します。 次に例を示します。
「よく使用されるパスのエイリアス」を参照してください。 |
よく使用されるパスのエイリアス
よく使用されるパスのエイリアスを使用すると、.dgml ファイルのサイズを小さくして、ファイルの読み込みまたは保存に必要な時間を短縮することができます。 エイリアスを作成するには、.dgml ファイルの末尾に <Paths></Paths> セクションを追加します。 このセクションには、パスのエイリアスを定義する <Path/> 要素を追加します。
<Paths>
<Path Id="MyPathAlias" Value="C:\...\..." />
</Paths>
.dgml ファイルの要素からエイリアスを参照するには、<Path/> 要素の Id をドル記号 ($) と括弧 (()) で囲みます。
<Nodes>
<Node Id="MyNode" Reference="$(MyPathAlias)MyDocument.txt" />
</Nodes>
<Properties>
<Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" />
</Properties>
.dgml ファイルを編集する方法については、「依存関係グラフの編集およびカスタマイズ」を参照してください。
指示されたグラフ クエリ言語 (DGQL) についての詳細
DGQL は、DGML の作成に使用できる軽量なクエリ言語です。 DGQL ステートメントは、ノード選択およびアクションの交互パターンに従います。これにより、各ノード選択によって次のアクションの入力が生成され、その出力が次のノード選択の入力になります。
DGQL ステートメントの形式は次のとおりです。
<node selection> / <action> / <node selection> / <action> / ...
ノード選択に使用される DGQL の構文を次の表に示します。
* |
すべてのノードを選択します。 |
+ "text" |
「text」を含むすべてのノードを選択します。 |
+ Id.Equals("text") |
Id が「text」に等しいすべてのノードを選択します。 |
+ Background.Contains("text") |
Background 属性に文字列「text」が含まれる値を持つすべてのノードを選択します。 |
+ "text1" + "text2" + ... |
「text1」または「text2」に一致するすべてのノードを選択します。 |
+ MyProperty="True" |
MyProperty という名前のプロパティを持ち、値が「True」のすべてのノードを選択します。 |
- Label.Contains("text") |
Label 属性で文字列「text」が Contains になっているもの以外のすべてのノードを選択します。 |
+ Category.Is("MyCategory") |
MyCategory という名前のカテゴリを持つノード、または MyCategory から継承するノードをすべて選択します。 |
選択されたノードで実行できる直接的なアクションの例を次の表に示します。
アクションの例 |
説明 |
---|---|
Microsoft.Contains |
入力ノードに格納されているすべてのノードを返します。 Contains を別のリンク カテゴリに置き換えることができます。 |
Microsoft.Open |
入力ノードのソース コードを開きます。 注意 Visual Studio 内でのみ動作します。 |
Microsoft.AllOutBoundLinks |
入力ノードからの出力リンク先であるすべてのノードを返します。 |
Microsoft.AllInboundLinks |
入力ノードへのリンクのソース端であるすべてのノードを返します。 |
Microsoft.Core.CreateGroupsByProperties |
GroupByProperties アクションを呼び出します。 |
Microsoft.AllNodes |
その時点までのグラフ全体のすべてのノードを返します。 |
データ ドリブン アクションでは、入力ノードおよびリンク内のデータのみに基づいて項目を選択します。 データ ドリブン アクションを使用してカテゴリを照合するときは、継承されたカテゴリが含まれます。 データ ドリブン アクションの例を次の表に示します。
種類 |
説明 |
---|---|
Node:Both:Category |
Category カテゴリを持ち、いずれかの方向を指すリンクによって入力ノードに接続されているすべてのノードを返します。 |
Link:Both:Category |
いずれかの方向を指すリンクによって入力ノードに接続されており、Category カテゴリを持つすべてのノードを返します。 |
Link:Backward:Category |
Category カテゴリを持つリンクを含む入力ノードを指すすべてのノードを返します。 |
Link:Forward:Category |
Category カテゴリを持つリンクを含む入力ノードが指すすべてのノードを返します。 |
ヒント
通常は、指定されたノード セット用の "既定の" アクションがあります。これは、アーキテクチャ エクスプローラーによって自動的に選択されます。 同じ振る舞いを取得するには、空のアクション (//) を使用します。
DGQL では空白は重要でないため、必要に応じてクエリを 1 行に収めるように指定できます。 これは、GraphCmd と共に –exec オプションを使うときに便利です。
DGQL のデバッグ時には、アーキテクチャ エクスプローラーで "Execute Expanded" アクションを使用すると、クエリの各手順を確認して、予想される結果を生成しない手順を見つけることができます。
例
次の DGQL ステートメントでは、クエリを実行します。手順の説明はステートメントの下にあります。
+ Id.Equals("Microsoft.Solution.ClassView") / "Microsoft.Solution.ClassView" / * / "Node:Both:CodeSchema_Class" / + CodeSchemaProperty_IsPublic.Equals("True")
アーキテクチャ エクスプローラーの最初の列で、クラス ビュー ノードをクリックします。
アクション "Microsoft.Solution.ClassView" を実行すると、ソリューションのすべての名前空間が返されます。
* を使用して、すべての名前空間を選択します。
CodeSchema_Class カテゴリを持ち、いずれかの方向を指すリンクによってそれらの名前空間に関連付けられているすべてのノードを選択します。 通常、これらはコンテインメント リンクです。
選択されたクラスをフィルター処理して、CodeSchemaProperty_IsPublic="True" プロパティを持つクラスだけを取得します。
"Microsoft.Solution.ClassView" アクションはクラス ビュー ノードの "既定の" アクションであるため、通常は必要ありません。 したがって、次に示すように、そのアクションを // に置き換えてクエリを簡略化し、クエリを 1 行に収めることができます。
+Id.Equals("Microsoft.Solution.ClassView")//*/"Node:Both:CodeSchema_Class"/+CodeSchemaProperty_IsPublic.Equals("True")
その他にできること
情報の入手方法
カテゴリ |
リンク |
---|---|
フォーラム |
|
ブログ |