次の方法で共有


依存関係図を使用してコードを検証する

依存関係図を使用する理由

コードがデザインと競合しないようにするには、Visual Studio で依存関係図を使用してコードを検証します。 これは、次の場合に役立ちます。

  • コード内の依存関係と依存関係図の依存関係の間の競合を見つけます。

  • 提案された変更の影響を受ける可能性がある依存関係を検索します。

    たとえば、依存関係図を編集してアーキテクチャの潜在的な変更を表示し、コードを検証して影響を受ける依存関係を確認できます。

  • コードをリファクタリングするか、別のデザインに移行します。

    コードを別のアーキテクチャに移動するときに作業が必要なコードまたは依存関係を見つけます。

必要条件

  • Visual Studio

    .NET Core プロジェクトの依存関係図を作成するには、Visual Studio 2019 バージョン 16.2 以降が必要です。

  • 依存関係図を含むモデリング プロジェクトを含むソリューション。 この依存関係図は、検証する C# または Visual Basic プロジェクトの成果物にリンクされている必要があります。 コードから依存関係図を作成するを参照してください

この機能をサポートする Visual Studio のエディションを確認するには、 アーキテクチャおよびモデリング ツールのエディションのサポートを参照してください。

Visual Studio で開いている依存関係図またはコマンド プロンプトから、コードを手動で検証できます。 ローカル ビルドまたは Azure Pipelines ビルドを実行するときに、コードを自動的に検証することもできます。

Important

Team Foundation Server (TFS) を使用してレイヤー検証を実行する場合は、ビルド サーバーに同じバージョンの Visual Studio もインストールする必要があります。

ライブ依存関係の検証

依存関係の検証はリアルタイムで行われ、エラーは エラー一覧にすぐに表示されます。

  • ライブ検証は、C# と Visual Basic でサポートされています。

  • ライブ依存関係の検証を使用するときに完全なソリューション分析を有効にするには、 エラー一覧に表示されるゴールド バーからオプション設定を開きます。

    • ソリューション内のすべてのアーキテクチャの問題を見ることに興味がない場合は、ゴールドバーを完全に無効にできます。
    • 完全なソリューション分析を有効にしない場合、分析は編集中のファイルに対してのみ行われます。
  • プロジェクトをアップグレードしてライブ検証を有効にすると、変換の進行状況がダイアログに表示されます。

  • ライブ依存関係検証のためにプロジェクトを更新すると、NuGet パッケージのバージョンはすべてのプロジェクトで同じにアップグレードされ、使用中の最高バージョンになります。

  • 新しい依存関係検証プロジェクトを追加すると、プロジェクトの更新がトリガーされます。

項目が検証をサポートしているかどうかを確認する

複数のアプリ間で共有されるプロジェクト内の Web サイト、Office ドキュメント、プレーン テキスト ファイル、ファイルにレイヤーをリンクできますが、検証プロセスには含まれません。 これらのレイヤー間に依存関係が表示されない場合、個別のレイヤーにリンクされているプロジェクトまたはアセンブリへの参照に対する検証エラーは表示されません。 このような参照は、コードがそれらの参照を使用しない限り、依存関係とは見なされません。

  1. 依存関係図で、1 つ以上のレイヤーを選択し、選択したレイヤーを右クリックし、[ リンクの表示] をクリックします。

  2. レイヤー エクスプローラーで、[Supports Validation]\(検証のサポート\) 列を確認します。 値が false の場合、項目は検証をサポートしません。

検証のために他の .NET アセンブリとプロジェクトを含める

依存関係図に項目をドラッグすると、対応する .NET アセンブリまたはプロジェクトへの参照がモデリング プロジェクトの [レイヤー参照 ] フォルダーに自動的に追加されます。 このフォルダーには、検証中に分析されるアセンブリとプロジェクトへの参照が含まれています。 依存関係図に手動でドラッグすることなく、検証のために他の .NET アセンブリとプロジェクトを含めることができます。

  1. ソリューション エクスプローラーで、モデリング プロジェクトまたはレイヤー参照フォルダーを右クリックし、[参照の追加] をクリックします。

  2. [ 参照の追加 ] ダイアログ ボックスで、アセンブリまたはプロジェクトを選択し、[OK] をクリック します

コードを手動で検証する

ソリューション項目にリンクされている依存関係図が開いている場合は、ダイアグラムから [検証 ] ショートカット コマンドを実行できます。 コマンド プロンプトを使用して、/p:ValidateArchitecture カスタム プロパティを True に設定して msbuild コマンドを実行することもできます。 たとえば、コードを変更するときは、依存関係の競合を早期にキャッチできるように、レイヤーの検証を定期的に実行します。

開いている依存関係図からコードを検証する

  1. ダイアグラム 画面を右クリックし、[ アーキテクチャの検証] をクリックします。

    既定では、依存関係図 (.layerdiagram) ファイルの Build Action プロパティが Validate に設定され、ダイアグラムが検証プロセスに含まれます。

    [エラー一覧] ウィンドウには、発生したエラーが報告されます。 検証エラーの詳細については、「レイヤーの 検証に関する問題のトラブルシューティング」を参照してください。

  2. 各エラーの原因を表示するには、[エラー 一覧 ] ウィンドウでエラーをダブルクリックします。

    Visual Studio では、エラーの原因ではなくコード マップが表示される場合があります。 これは、コードが依存関係図で指定されていないアセンブリに依存している場合、または依存関係図で指定された依存関係がない場合に発生します。 コード マップまたはコードを確認して、依存関係が存在する必要があるかどうかを判断します。 コード マップの詳細については、「 ソリューション間の依存関係をマップする」を参照してください

  3. エラーを管理するには、「 レイヤーの検証エラーを解決する」を参照してください。

コマンド プロンプトでコードを検証する

  1. Visual Studio コマンド プロンプトを開きます。

  2. 次のいずれかのオプションを選びます。

    • ソリューション内の特定のモデリング プロジェクトに対してコードを検証するには、次のカスタム プロパティを使用して MSBuild を実行します。

      msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
      

      -又は-

      モデリング プロジェクト (.modelproj) ファイルと依存関係図を含むフォルダーを参照し、次のカスタム プロパティを使用して MSBuild を実行します。

      msbuild /p:ValidateArchitecture=true
      
    • ソリューション内のすべてのモデリング プロジェクトに対してコードを検証するには、次のカスタム プロパティを使用して MSBuild を実行します。

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
      

      -又は-

      依存関係図を含むモデリング プロジェクトが含まれている必要があるソリューション フォルダーを参照し、次のカスタム プロパティを使用して MSBuild を実行します。

      msbuild /p:ValidateArchitecture=true
      

      発生したエラーが一覧表示されます。 MSBuild の詳細については、「 MSBuildMSBuild タスク」を参照してください。

    検証エラーの詳細については、「レイヤーの 検証に関する問題のトラブルシューティング」を参照してください。

検証エラーを管理する

開発プロセス中に、検証中に報告された競合の一部を抑制したい場合があります。 たとえば、既に対処しているエラーや、特定のシナリオに関連しないエラーを抑制できます。 エラーを抑制する場合は、Team Foundation で作業項目をログに記録することをお勧めします。

Warnung

作業項目を作成またはリンクするには、TFS ソース コード管理 (SCC) に既に接続されている必要があります。 別の TFS SCC への接続を開こうとすると、Visual Studio によって現在のソリューションが自動的に閉じられます。 作業項目を作成またはリンクする前に、適切な SCC に既に接続されていることを確認します。 Visual Studio の以降のリリースでは、SCC に接続していない場合、メニュー コマンドは使用できません。

検証エラーの作業項目を作成する

  • [エラー一覧] ウィンドウで、エラーを右クリックし、[作業項目の作成] をポイントして、作成する作業項目の種類をクリックします。

[エラー一覧] ウィンドウで検証エラーを管理するには、次のタスクを使用します。

から 次の手順に従います
検証中に選択したエラーを抑制する 選択した 1 つまたは複数のエラーを右クリックし、[ 検証エラーの管理] をポイントし、[ エラーの抑制] をクリックします。

抑制されたエラーは取り消し線の書式設定で表示されます。 次回検証を実行すると、これらのエラーは表示されません。

抑制されたエラーは、対応する依存関係図ファイルの .suppressions ファイルで追跡されます。
選択したエラーの抑制を停止する 選択した抑制エラーまたはエラーを右クリックし、[ 検証エラーの管理] をポイントして、[ エラーの抑制を停止] をクリックします。

選択した抑制されたエラーは、次回検証を実行するときに表示されます。
[ エラー一覧 ] ウィンドウで抑制されたすべてのエラーを復元する [エラー一覧] ウィンドウ内の任意の場所を右クリックし、[検証エラーの管理] をポイントし、[抑制されたエラーをすべて表示] をクリックします。
[ エラー一覧 ] ウィンドウで抑制されたすべてのエラーを非表示にする [エラー一覧] ウィンドウ内の任意の場所を右クリックし、[検証エラーの管理] をポイントし、[抑制されたエラーをすべて非表示にする] をクリックします。

コードを自動的に検証する

ローカル ビルドを実行するたびに、レイヤーの検証を実行できます。 チームで Azure DevOps を使用している場合は、ゲート チェックインを使用してレイヤー検証を実行できます。これは、カスタム MSBuild タスクを作成して指定し、ビルド レポートを使用して検証エラーを収集できます。 ゲート チェックイン ビルドを作成するには、 TFVC ゲート チェックインを参照してください。

ローカル ビルド中にコードを自動的に検証するには

テキスト エディターを使用してモデリング プロジェクト (.modelproj) ファイルを開き、次のプロパティを含めます。

<ValidateArchitecture>true</ValidateArchitecture>

または

  1. ソリューション エクスプローラーで、依存関係図またはダイアグラムを含むモデリング プロジェクトを右クリックし、[プロパティ] をクリックします。

  2. [ プロパティ ] ウィンドウで、モデリング プロジェクトの Validate Architecture プロパティを True に設定 します

    これには、検証プロセスのモデリング プロジェクトが含まれます。

  3. ソリューション エクスプローラーで、検証に使用する依存関係図 (.layerdiagram) ファイルをクリックします。

  4. [ プロパティ ] ウィンドウで、ダイアグラムの [ビルド アクション] プロパティが [検証] に設定されていることを確認します。

    これには、検証プロセスの依存関係図が含まれます。

[エラー一覧] ウィンドウでエラーを管理するには、「 レイヤーの検証エラーを解決する」を参照してください。

レイヤーの検証に関する問題のトラブルシューティング

次の表では、レイヤーの検証に関する問題とその解決方法について説明します。 これらの問題は、コードとデザインの間の競合に起因するエラーとは異なります。 これらのエラーの詳細については、「 レイヤーの検証に関する問題のトラブルシューティング」を参照してください。

問題 考えられる原因 Resolution
検証エラーは想定どおりに発生しません。 検証は、ソリューション エクスプローラーの他の依存関係図からコピーされ、同じモデリング プロジェクト内にある依存関係図では機能しません。 この方法でコピーされた依存関係図には、元の依存関係図と同じ参照が含まれています。 モデリング プロジェクトに新しい依存関係図を追加します。

ソース依存関係図から新しい図に要素をコピーします。

レイヤーの検証エラーを解決する

依存関係図に対してコードを検証すると、コードがデザインと競合したときに検証エラーが発生します。 たとえば、次の条件によって検証エラーが発生する可能性があります。

  • アーティファクトが間違ったレイヤーに割り当てられます。 この場合は、成果物を移動します。

  • クラスなどの成果物は、アーキテクチャと競合する方法で別のクラスを使用します。 この場合は、コードをリファクタリングして依存関係を削除します。

これらのエラーを解決するには、検証中にエラーが表示されないまでコードを更新します。 このタスクは反復的に実行できます。

次のセクションでは、これらのエラーで使用される構文について説明し、これらのエラーの意味について説明し、解決または管理するために何ができるかを提案します。

構文 説明
ArtifactN(ArtifactTypeN) ArtifactN は、依存関係図のレイヤーに関連付けられている成果物です。

ArtifactTypeN は、クラスメソッドなどの ArtifactN の型です。次に例を示します。

MySolution.MyProject.MyClass.MyMethod(メソッド)
NamespaceNameN 名前空間の名前。
LayerNameN 依存関係図のレイヤーの名前。
DependencyType Artifact1Artifact2 の間の依存関係の種類。 たとえば、Artifact1 には Artifact2 との Calls リレーションシップがあります。
エラー構文 エラーの説明
DV0001: 依存関係が無効です この問題は、レイヤーにマップされたコード要素 (名前空間、型、メンバー) が別のレイヤーにマップされたコード要素を参照しているが、このレイヤーを含む依存関係検証図にこれらのレイヤー間に依存関係の矢印がない場合に報告されます。 これは依存関係制約違反です。
DV1001: 名前空間名が無効です この問題は、"Allowed Namespace Names" プロパティにこのコード要素が定義されている名前空間が含まれていないレイヤーに関連付けられているコード要素で報告されます。 これは名前付け制約違反です。 "許可される名前空間名" の構文は、そのレイヤーに関連付けられたコード要素が定義されることが許可されている名前空間のセミコロン区切りのリストでなければならないことに注意してください。
DV1002: 参照できない名前空間への依存関係 この問題は、レイヤーに関連付けられているコード要素で報告され、レイヤーの "参照不可名前空間" プロパティで定義されている名前空間で定義されている別のコード要素を参照しています。 これは名前付け制約違反です。 "参照不可名前空間" プロパティは、このレイヤーに関連付けられているコード要素で参照してはならない名前空間のセミコロン区切りリストとして定義されていることに注意してください。
DV1003: 許可されていない名前空間名 この問題は、"Disallowed Namespace Names" プロパティにこのコード要素が定義されている名前空間が含まれているレイヤーに関連付けられているコード要素で報告されます。 これは名前付け制約違反です。 "許可されていない名前空間名" プロパティは、このレイヤーに関連付けられているコード要素を定義しない名前空間のセミコロン区切りリストとして定義されていることに注意してください。
DV2001: レイヤー ダイアグラムのプレゼンス この問題は、依存関係図ファイルは含まれていないが、依存関係検証アナライザーを参照するプロジェクトで報告されます。 依存関係の検証が使用されていない場合は、ソリューション エクスプローラーから "Microsoft.DependencyValidation.Analyzers" を直接削除するか、この警告を抑制できます。 依存関係図を追加するには、「 コードから依存関係図を作成する」を参照してください
DV2002: 未マップ型のベース この問題は、コード要素がレイヤーにマップされていない場合に報告されます。
DV3001: リンクがありません レイヤー 'LayerName' は、見つからない 'Artifact' にリンクします。 アセンブリ参照がありませんか?
DV9001: アーキテクチャ分析で内部エラーが検出されました 結果が完全ではない可能性があります。 詳細については、ビルド イベント ログまたは出力ウィンドウの詳細を参照してください。