7

管理されたアセンブリのセットを調べて、ある名前空間のタイプのいずれかが別の名前空間のタイプに依存しているかどうかを通知できるユーティリティはありますか?たとえば、名前空間があり、内のMyApp.BusinessRules何にも直接アクセスしたくないMyApp.GUIが、両方の名前空間が同じアセンブリにあるとします。私の目標は、さまざまな結合ルールが破られていないことを確認するカスタムMSBuildタスクを記述できるようにすることです。

これまでのところ、これを行う可能性があると思われる唯一のツールはNDependですが、もっと簡単な解決策があるかどうか疑問に思っています。

4

6 に答える 6

3

正直なところ、NDependが最も簡単な方法になると思います。

ただし、1つのアセンブリのビットが相互に参照することを本当に望まない場合は、ほぼ確実に、アセンブリをより多くの論理ユニットに分割する必要があります。

于 2008-11-20T11:06:21.643 に答える
3

これまでのところ、これを実行できるように見える唯一のツールは NDepend ですが、もっと簡単な解決策があるかどうか疑問に思っています。

私はツールNDependの開発者の 1 人です。NDepend の複雑な点と、よりシンプルなソリューションを想像する方法を教えてください。

NDepend には、必要なことを行うための 3 つの異なる方法があります。依存マトリックス依存グラフ、および名前空間間のサイクルを検出するためのコード ルール (CQLinq)とルールを記述したり、特定の依存関係を強制したりすることもできます。

たとえば、MyApp.BusinessRules 名前空間があり、MyApp.GUI で直接アクセスしたくないが、両方の名前空間が同じアセンブリにあるとします。

そのために、次の CQLinq ルールを記述できますが、それよりも簡単でしょうか?:

warnif count > 0
let businessRules = Application.Namespaces.WithNameLike("^MyApp.BusinessRules")
let gui = Application.Namespaces.WithNameLike("^MyApp.GUI")

from n in businessRules.UsingAny(gui)
let guidNamespacesUsed = n.NamespacesUsed.Intersect(gui)
select new { n, guidNamespacesUsed }
于 2008-11-20T18:57:46.293 に答える
2

.NET Reflector 用のDSM プラグインを使用して、名前空間の依存関係を分析できます(私はその開発者です)。

アセンブリが分析されたら、プロジェクトをファイルに保存できます。このファイルはシンプルな構造の単なる XML であるため、カスタム分析用のスクリプトに渡すことができます。

[更新] : このプラグインは、Visual Studio アドインの形式で利用できるようになりました

于 2009-01-08T19:59:57.677 に答える
1

Visual Studio 2010 Ultimate の RC リリースを試して、.NET コードの依存関係グラフを生成できます。すべてのアセンブリ、名前空間、クラス、またはこれらの組み合わせのグラフを生成するか、アーキテクチャ エクスプローラーを使用して、視覚化する特定の成果物と関係を選択できます。

依存関係グラフまたは既存の成果物からレイヤー図を作成し、許可された依存関係を描画してから、MSBuild プロセスの一部としてレイヤー検証を含めて、無効な依存関係が導入されていないことを確認することもできます。

方法: コードからグラフ ドキュメントを生成する: http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Visual Studio Ultimate を使用して、有向グラフ ドキュメントを生成することにより、既存のコードの関係と編成を調べることができます。これらのグラフは、コード要素とその関係を、リンクまたはエッジで接続された一連のノードとして表します。これらのグラフを使用して、コードの視覚化、調査、および分析を行うことができます。

方法: Architecture Explorer を使用してコードを検索する: http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

アーキテクチャ エクスプローラーを使用して、視覚化するコードの垂直セクションまたは「スライス」を選択できます。Visual Studio ソリューションのソース コード、または .dll ファイルまたは .exe ファイルのコンパイル済みマネージ コードを調べることができます。アーキテクチャ エクスプローラーを使用して、追加のプロバイダーをインストールすることにより、他のドメインを参照できます。視覚化するコードが見つかったら、グラフを生成してそのコード内の関係を調べることができます。

方法: アーティファクトからレイヤー図を作成する: http://msdn.microsoft.com/en-us/library/dd465141%28VS.100%29.aspx

...レイヤー図を使用して、システムの高レベルのアーキテクチャを視覚化し、コードがこの設計に準拠していることを確認します。このタスクを実行するには、Visual Studio ソリューションのアーティファクトを整理して、論理グループ、抽象グループ、またはレイヤーに関連付けます。これらのレイヤーは、これらの成果物が実行する主要なタスクまたはシステムの主要なコンポーネントを記述します。レイヤー間の矢印は、これらのアーティファクト間に存在する、または存在すべき相互依存性を表しています。コードにアーキテクチャ上の制約を適用するには、意図した依存関係を図に記述してから、図に対してコードを検証します。このようにレイヤー図を使用すると、コードの理解、再利用、保守が容易になります。

レイヤー図 http://i.msdn.microsoft.com/Dd465141.UML_LayerRefReading(en-us,VS.100).png

方法: レイヤー図に対してコードを検証する: http://msdn.microsoft.com/en-us/library/dd409395%28VS.100%29.aspx

レイヤー ダイアグラムに対してコードを検証することで、コードの進化に合わせてコードにアーキテクチャ上の制約を課すことができます。このタスクを実行すると、コードの依存関係がダイアグラムの依存関係と比較されます。

RC ダウンロード: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .

Visual Studio 2010 Architectural Discovery & Modeling Toolsフォーラム: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

于 2010-02-22T18:31:12.660 に答える
0

リフレクターはこれを行います。

名前空間を右クリックし、[分析]、[ビオラ]をクリックします。:)

于 2008-11-20T11:07:07.073 に答える