すべてのプロジェクトのソリューションまたはディレクトリに問い合わせて、循環参照がどこにあり、順番にコンパイルできるかを教えてくれる優れたユーティリティまたはプログラムを知っている人は誰でもいます。
少し前に見たのを覚えていますが、どこにも見つかりません。
すべてのプロジェクトのソリューションまたはディレクトリに問い合わせて、循環参照がどこにあり、順番にコンパイルできるかを教えてくれる優れたユーティリティまたはプログラムを知っている人は誰でもいます。
少し前に見たのを覚えていますが、どこにも見つかりません。
NDependは、これだけでなく、さらに多くのことを実行する優れたツールです。多分それはあなたが望むものにはやり過ぎですが、試用版があるので見てください...
これが遅い答えであることは知っていますが、GraemeFとtsilbの答えを使用しても、2つのアセンブリ間に依存関係がないことがわかりました。依存関係の順序を逆にすると(アセンブリAはBを参照しますが、 Aを参照するBに切り替えると)、依存関係はビルド順序のままになります。これを解決するには、ソリューションの[プロパティ]ダイアログを開き、[共通のプロパティ]、[プロジェクトの依存関係]の順に移動します。アセンブリAを見つけて、アセンブリBへの依存関係を削除します。これにより、通常どおり参照を追加できます。
System.Reflectionを介して依存関係ツリーを追跡できます。ツリーを構築するときに、ノードを追加するときに、ノードの親が追加するプロジェクトまたはアセンブリと同じプロジェクトまたはアセンブリであるかどうかを確認します。trueの場合、ユーザーに例外をスローします。
このような技術的な例外をスローすることは、アセンブリの参照と例外がどのように機能するかを知っているユーザー、つまり開発者のようなユーザーであれば問題ありません:)
ソリューション内のプロジェクト間でプロジェクト参照を使用する場合、正しいビルド順序はVisual Studio(またはMSBuild)によって自動的に決定されます。もちろん、アセンブリ参照を使用すると、これは機能しなくなります。また、Visual Studioでは、循環プロジェクト参照を追加できなくなります。
私は、いくつかの循環参照パスを備えた巨大なVisualStudioソリューションを継承しました。循環参照チェーンを見つけるのに役立つlinqpadスクリプトを作成しました。
https://github.com/ronnieoverby/linqpad-utils/blob/master/Find%20circular%20references.linq
私の実装はおそらくナイーブですが、それは私にとってかなり速く機能しました。