レイヤー図を使用したコードの検証
コードが設計と一致していないことを確認するには、Visual Studio の最終、Visual Studio Premium のレイヤー図を使用してコードを検証できます。これが役立つことがあります:
コード内の依存関係とレイヤー図の依存関係の競合を検索します。
提案された変更によって影響を受ける可能性がある依存関係を見つける。
たとえば、レイヤー図を編集して予測されるアーキテクチャの変更を表示した後、コードを検証して、影響を受ける依存関係を確認できます。
コードを別の設計にリファクターまたは移行する。
コードを別のアーキテクチャに実行される処理を必要なコード、または依存関係を検索します。
Visual Studio で開いているレイヤー図またはコマンド プロンプトからコードを手動で検証できます。実行中のコードがローカルを自動的に検証ビルド、または基本チーム ビルド時にします。" "を参照してください。チャネル 9 ビデオ: レイヤー図を使用して、アーキテクチャを設計し、検証します。
要件
Visual Studio の最終または Visual Studio Premium
レイヤー図を含むモデリング プロジェクトを持つソリューション。Visual C# の .NET アーティファクトにこのレイヤー図がリンク検証することを Visual Basic .NET プロジェクトが。「コードからのレイヤー図の作成」を参照してください。
目的
成果物が検証をサポートするかどうかを確認します。
検証用の .NET 他のアセンブリおよびプロジェクトを追加します。
コードを手動で検証します。
コードを自動的に検証します。
レイヤー検証の問題を修正します。
レイヤー検証エラーを理解し、解決します。
成果物が検証をサポートするかどうかを確認します。
レイヤー図で一つ以上のレイヤーを選択し、選択内容を右クリックし、を [リンクの表示] をクリックします。
レイヤー エクスプローラーで、[検証をサポート] 列を確認します。値が false の場合、項目は検証をサポートしていません。
レイヤーに Web サイト、Office ドキュメント、およびプレーンテキスト ファイルをリンクできますが、検証プロセスではそれらは含まれません。検証エラーは層を分離するためにリンク アセンブリまたはプロジェクトへの参照の依存関係がそれらのレイヤー間でない場合は表示されません。このような参照は、コードがこれらの参照を使用している場合を除き、依存関係と見なされません。
検証用の .NET 他のアセンブリおよびプロジェクトを追加します。
ドラッグした項目をレイヤー図には、対応する .NET のアセンブリへの参照、レイヤー図でも、プロジェクトはモデリング プロジェクトの [レイヤー参照] フォルダーに自動的に追加されます。検証時に解析されるプロジェクトおよびこのフォルダーには、アセンブリへの参照が格納されます。レイヤー図にドラッグして検証用の .NET 他のアセンブリおよびプロジェクトを含めることができます。
[ソリューション エクスプローラー] で、モデリング プロジェクトまたは [レイヤー参照] フォルダーを右クリックし、[参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスで、アセンブリまたはプロジェクトを選択し、[OK] をクリックします。
コードを手動で検証します。
ソリューション項目にリンク開いているレイヤー図がある場合は、図から [検証] のショートカット コマンドを実行できます。また Trueに設定 /p:ValidateArchitecture のカスタム プロパティとの msbuild のコマンドの実行にコマンド プロンプトを使用できます。たとえば、コードの変更を行うために、依存関係の競合を早期キャッチできるようにレイヤー検証を定期的に実行します。
開かれているレイヤー図からコードを検証するには
図の画面を右クリックし、[アーキテクチャの検証] をクリックします。
[!メモ]
既定では、図を検証プロセスに含めるには、レイヤー図 (layerdiagram) ファイルの "ビルド アクション" プロパティが [検証] に設定されている必要があります。
発生したエラーは、[エラー一覧] ウィンドウに表示されます。検証エラーの詳細については、レイヤー検証エラーを理解し、解決します。を参照してください。
各エラーのソースを表示するには、[エラー一覧] ウィンドウでエラーをダブルクリックします。
[!メモ]
Visual Studio では、エラーのソースの代わりに依存関係グラフが表示されることがあります。これは、レイヤー図で指定されていないアセンブリ上にコードの依存関係があるか、レイヤー図で指定された依存関係がコードにない場合に起こります。依存関係グラフまたはコードを確認し、依存関係が必要であるかどうかを検証してください。依存関係グラフの詳細については、「依存関係グラフでのコード依存関係の視覚化」を参照してください。
エラーを管理するには、[検証エラーの管理]を参照してください。
コマンド プロンプトでコードを検証するには
Visual Studio のコマンド プロンプトを開きます。
次のいずれかを選択します。
ソリューションの特定のモデリング プロジェクトに対してコードを検証するには、次のカスタム プロパティを使用して 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 の詳細については、「MSBuild」および「MSBuild タスク」を参照してください。
検証エラーの詳細については、レイヤー検証エラーを理解し、解決します。を参照してください。
[検証エラーの管理]
開発プロセスの実行中は、検証時に報告される一部の競合を抑制できます。たとえば、既に解決したエラーや特定のシナリオに関連しないエラーを抑制できます。エラーを抑制した場合は、Team Foundation で作業項目をログに記録することをお勧めします。
検証エラーの作業項目を作成するには
- [エラー一覧] ウィンドウで、エラーを右クリックし、[作業項目の作成] をポイントし、作成する作業項目の種類をクリックします。
[エラー一覧] ウィンドウで検証エラーを管理するには、次の操作を行います。
目的 |
手順 |
---|---|
検証中に選択したエラーを抑制する |
エラーを 1 つ以上選択して右クリックし、[検証エラーの管理] をポイントし、[エラーの抑制] をクリックします。 抑制されたエラーは、取り消し線付きで表示されます。次回検証を実行したとき、これらのエラーは表示されません。 抑制されたエラーは、対応するレイヤー図ファイルの .suppressions ファイルで追跡されます。 |
選択したエラーの抑制を停止する |
抑制されたエラーを 1 つまたは複数選択して右クリックし、[検証エラーの管理] をポイントし、[エラーの抑制の停止] をクリックします。 次回検証を実行したとき、抑制されたエラーのうち選択したものが表示されます。 |
[エラー一覧] ウィンドウに、抑制されたすべてのエラーを再び表示する |
[エラー一覧] ウィンドウ内の任意の場所を右クリックし、[検証エラーの管理] をポイントし、[抑制されたエラーの表示] をクリックします。 |
[エラー一覧] ウィンドウで抑制されたエラーをすべて非表示にする |
[エラー一覧] ウィンドウ内の任意の場所を右クリックし、[検証エラーの管理] をポイントし、[抑制されたエラーの非表示] をクリックします。 |
コードを自動的に検証します。
ローカル ビルドを実行するたびにレイヤー検証を実行できます。チーム使用 Team Foundation ビルドが、カスタム MSBuild タスクを作成して指定できる、検証エラーを収集するには、ビルド レポートを使用して、ゲート チェックインを、レイヤー検証を行うことができる場合は。作成すると、チェックイン ビルドは、" "を 変更内容を検証するためのゲート チェックイン ビルド プロセスの定義をゲートしました。
コードをローカル ビルド時に自動的に検証するには
- テキスト エディターを使用してモデリング プロジェクト (.modelproj) ファイルを開き、次のプロパティを追加します。
<ValidateArchitecture>true</ValidateArchitecture>
または
ソリューション エクスプローラーで、1 つ以上のレイヤー図が含まれているモデリング プロジェクトを右クリックし、[プロパティ] をクリックします。
プロパティ ウィンドウで、モデリング プロジェクトの "アーキテクチャの検証" プロパティが [True] に設定されていることを確認します。
これには、検証プロセス内のモデリング プロジェクトが含まれます。
ソリューション エクスプローラーで、検証プロセスに使用するレイヤー図 (.layerdiagram) ファイルをクリックします。
[プロパティ] ウィンドウで、図の "ビルド アクション" プロパティが [検証] に設定されていることを確認します。
これには、検証プロセス内のレイヤー図が含まれます。
[エラー一覧]ウィンドウにエラーを管理するには、[検証エラーの管理]を参照してください。
コードを Team Foundation ビルド時に自動的に検証するには
チーム エクスプローラーで、ビルド定義をダブルクリックし、[プロセス] をクリックします。
[ビルド プロセス パラメーター] の [コンパイル] を展開し、[MSBuild 引数] パラメーターに次のように入力します。
/p:ValidateArchitecture=true
検証エラーの詳細については、レイヤー検証エラーを理解し、解決します。を参照してください。Team Foundation ビルド の詳細については、以下のトピックを参照してください。
レイヤー検証の問題を修正します。
レイヤー検証に関する問題とその解決方法について、次の表で説明します。これらの問題は、コードと設計の間の競合によって発生するエラーとは異なります。これらのエラーの詳細については、レイヤー検証エラーを理解し、解決します。を参照してください。
懸案事項 |
原因 |
解決策 |
---|---|---|
検証エラーが予期したとおりに発生しない。 |
検証はソリューション エクスプローラーの他のレイヤー図からコピーされたレイヤー図および同じモデリング プロジェクトのレイヤー図には機能しません。この方法でコピーされたレイヤー図には、コピー元のレイヤー図と同じ参照が含まれます。 |
|
レイヤー検証エラーを理解し、解決します。
レイヤー図に対してコードを検証すると、検証エラーは、コードが設計と一致した場合に発生します。たとえば、次の条件では検証エラーが発生する可能性があります:
成果物が不適切なレイヤーに割り当てられている。この場合、成果物を移動します。
クラスなどの成果物が、アーキテクチャに違反する形で別のクラスを使用している。この場合、コードをリファクタリングして依存関係を削除します。
これらのエラーを解決するには、コードを更新して、検証時にエラーが表示されなくなるようにします。この作業は、反復的な方法で実行します。
次のセクションでは、これらのエラーで使用される構文を説明します。これらのエラーの意味が、それらを解決または管理するために実行できるものについて説明しますするついて説明します。
構文 |
説明 |
---|---|
ArtifactN(ArtifactTypeN) |
ArtifactN は、レイヤー図のレイヤーに関連付けられている成果物です。 ArtifactTypeN は、クラス、メソッドなど、ArtifactN のタイプです。以下に例を示します。 MySolution.MyProject.MyClass.MyMethod(Method) |
NamespaceNameN |
名前空間の名前。 |
LayerNameN |
レイヤー図のレイヤーの名前。 |
DependencyType |
Artifact1 と Artifact2 の依存関係のタイプ。たとえば、Artifact1 は Artifact2 と "呼び出し" 関係にあるなどです。 |
エラーの構文 |
エラーの説明 |
---|---|
AV0001: 無効な依存関係: Artifact1(ArtifactType1) --> Artifact2(ArtifactType2) レイヤー: LayerName1、LayerName2 | 依存関係: DependencyType |
LayerName1 は LayerName2 に直接依存していないため、LayerName1 の Artifact1 を LayerName2 の Artifact2 に依存させることはできません。 |
AV1001: 無効な名前空間: Artifact レイヤー: LayerName | 必要な名前空間: NamespaceName1 | 現在の名前空間: NamespaceName2 |
LayerName では、それに関連する成果物を NamespaceName1 に所属させる必要があります。Artifact は NamespaceName1 ではなく NamespaceName2 にあります。 |
AV1002: 禁止された名前空間の使用: Artifact1(ArtifactType1) | Artifact2(ArtifactType2) レイヤー: LayerName | 禁止された名前空間: NamespaceName | 依存関係: DependencyType |
LayerName では、それに関連する成果物を NamespaceName に依存させないようにする必要があります。Artifact2 は NamespaceName にあるため、Artifact1 を Artifact2 に依存させることはできません。 |
AV1003: 禁止された名前空間内: Artifact(ArtifactType) レイヤー: LayerName | 禁止された名前空間: NamespaceName |
LayerName では、それに関連する成果物を NamespaceName に所属させることはできません。Artifact は NamespaceName に所属します。 |
AV3001: 不足しているリンク: 'Artifact' へのレイヤー 'LayerName' リンクが見つかりません。アセンブリ参照が存在することを確認してください。 |
成果物への LayerName リンクが見つかりません。たとえば、モデリング プロジェクトでクラスを含むアセンブリへの参照が欠落しているために、クラスへのリンクが欠落している場合があります。 |
AV9001: アーキテクチャの検証で内部エラーが検出されました。結果が不完全である可能性があります。詳細については、ビルド イベント ログの詳細または出力ウィンドウを参照してください。 |
ビルド イベントのログを表示するには、ウィンドウを詳細については、出力します。 |