0

すべて独自の .Xap ファイルにコンパイルする複数の Silverlight プロジェクト (ビュー) を持つ Silverlight ソリューションがあります。

Xap ファイルの動的ダウンロードを処理する「マスター」プロジェクトが 1 つありますが、これは非常にうまく機能します。

しかし今、すべてのビュー プロジェクトですべての参照が CopyLocal=false に設定されていることを確認する必要があります。「マスター」プロジェクトのみが CopyLocal=true を持つことができます。

これは、ビューによって生成された Xap ファイルがかなり小さいままであることを意味します。

私がやりたいことは、ポストまたはビルド プロセス中にチェックして、いずれかの View プロジェクトに CopyLocal=true の参照があるかどうかを確認することです。

これを行う賢い方法は何でしょうか?Post Build イベントで外部ツールを使用していますか? それとも、Visual Studio のアドインですか? または、このために Visual Studio でマクロを作成しますか?

アセンブリキャッシュで .extmap を使用することを検討しましたが、その中でアセンブリを指定する必要があるため、これで問題は解決しません。間違った設定の参照があるかどうかを知り、それを報告する必要があります。それを修正することは問題ではなく、手動で行われます。それは私が必要とする通知です。

ソリューションには現在 35 個のプロジェクトがあるため、毎回すべてを手動でチェックする必要はありません。

この質問に似た質問を見つけましたが、可能な解決策として msbuild がリストされています。「コード」を使用してこれを行う方法があるかどうかを知りたいです(ツール/アドインで事前に構築されているかどうかに関係なく)

4

2 に答える 2

0

アドインパスを選択しました。BuildEvents.OnBuildBeginをリッスンするアドインを作成しました

そのイベントが発生するたびに、現在のソリューションのすべてのプロジェクトのリストを作成します。DTEの世界での生活を少し難しくするソリューションフォルダもあるので、少し再帰的な検索を行います。

次に、すべてのプロジェクトをループしてVSProjectにキャストし、すべての参照をループできるようにします。

間違った参照に遭遇したときはいつでも、Documentプロパティを参照の完全なソリューションパスに設定するErrorTaskを作成します。これを行うには、ソリューションのルートに至るまで、この参照が含まれるプロジェクトのパスを作成します。

次に、ErrorTaskは、私が作成したErrorListHelperクラスに送信されます。このクラスは、ErrorTasksを処理し、ナビゲーションも実行します。

すべてのプロジェクトが完了し、エラーが見つかった場合は、現在のビルドをキャンセルして[エラーリスト]ウィンドウを表示します。このウィンドウには、作成したすべての参照エラーがErrorListHelperに保持されます。

問題の参照に移動するときはいつでも、ソリューションエクスプローラーウィンドウをアクティブにし、UIHierarchyを使用してそのルートを取得します。

次に、UIHierarchyを使用してUIHierarchyItemsに到達し、それらを展開して、ルートから下に向かってパスを段階的に歩きます。最も深いレベル(参照)に到達し、それを選択するまで。

特定のソリューションと特定のプロジェクト(.Views。*および.ViewModels。*)のソリューション内でのみ必要なので、エラーリストの作成中にそれらをチェックすることもできます。

それは魅力のように機能し、私がすべてうまくいったと思った35のプロジェクトですでに12の「間違った」参照が見つかりました。

于 2012-03-04T12:20:32.807 に答える
0

これを行うために、現在別のパスを使用しています。DTE2 オブジェクトにアクセスできる単体テストを作成するために使用できる基本クラスがあります。この方法では、アドインは必要ありません。これは、テスト クラスが Silverlight プロジェクトに実際にアクセスする必要がないため、Silverlight プロジェクトでも機能します。ソリューション内にいるだけで、プロジェクトを反復処理して参照を確認できます。

于 2013-01-24T05:05:32.220 に答える