2

いくつかのプロジェクト(すべてのクラスライブラリ)で構成されるソリューションがあります。たとえば、A、B、C、D、Eです。

A、B、およびCはコア機能を提供するため、一緒に配布する必要があります。DとEは、すべての状況で必ずしも必要とは限らないいくつかのアダプターを提供します。

したがって、当然、配布する前に、A、B、およびCを1つのアセンブリ(ABCという名前)に統合したいと思います。

問題は、プロジェクトがコンパイルされるときに、DとEがABCではなくA、B、C、あるいはその両方を参照することです。したがって、後で他のプロジェクトでABC、D、およびEを参照しようとすると、「インスタンス引数:「A.IBoo」から「A.IBoo」に変換できません」などのコンパイルエラーが発生します。もちろん、VSではアセンブリの署名(名前)が異なることもわかります。

これを修正する良い方法はありますか?

おそらくパブリッシャーポリシーを使用できることは知っていますが、それはきれいではありません。

また、元のソリューションでプロジェクトを組み合わせてILmergeの使用を回避できることはわかっていますが、使用したくないと思います。

4

1 に答える 1

2

私は同様の問題に遭遇しました。型が2回参照されていることがわかりました。結合されたアセンブリに1回、個別のプロジェクトに1回。地獄のようにイライラしました。

プロジェクトを削除して、結合されたアセンブリのみを参照して、ライブラリのように扱うか、プロジェクトをビルド後の操作で結合することができます。

もう1つの可能性は、グローバル名前空間(http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx)のエイリアスを作成し、結合されたアセンブリを参照することです。欠点は、常にアダプターのビルドビハインドになることです。

実際のプロジェクトを見ずに、これが私がすることです:私はABCプロジェクトを分離し、それらを独自のソリューションに入れます。ビルド後のイベントでは、ILMergeを実行します。これがバージョン管理され、厳密な名前が付けられていることを確認してください。それはあなたが将来の頭痛を救うでしょう。

プロジェクトDとEは、ABC結合アセンブリへの参照とともにソリューションに含まれます。

繰り返しになりますが、コードと依存関係を見ずに判断するのは困難です。また、変更が発生する頻度によっても異なります。2つのソリューションを持つDEに対応するためにABCに変更を加えると、非常に早く古くなります。

于 2012-05-03T17:08:14.773 に答える