0

これができるかどうかはわかりませんが、とにかくここに行きます。

私は、エンド ユーザーによって実装される N 層アプリケーションを作成しました。Myapp.client という名前のプロジェクトでのみ、1 つのクラスを公開したいと考えていました。ここで、エンド ユーザーがアプリケーションを操作するときに、プロジェクトにこの DLL を含めるだけで済むようにしたいと考えています。私が直面している問題は、クライアント プロジェクト (dll) が明らかに私のソリューション内の他のプロジェクトへの参照を持っていることです。クライアント dll のみを含めてテストすると、常にこのタイプのコンパイル エラーが発生します (これは正常であり、理解しています)。

エラー 1 タイプ 'XXXX.DataObjects.Someclass' は、参照されていないアセンブリで定義されています。アセンブリ 'XXXX.DataObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8eefc54a8e08e7cc' への参照を追加する必要があります。

誰かがクライアント dll をインクルードするときに、これらの参照を自動的にインクルードする方法はありますか? または、クライアント dll にすべてを含めるようにアプリを書き直す必要がありますか?

ありがとう。

4

2 に答える 2

1

これは私にはプラグイン アーキテクチャのように思えます。プラグインの実装者が実装する必要がある dll には、理想的にはクリーンなインターフェイスが含まれている必要があります。もちろん、そのインターフェイスには、コードに属するいくつかのタイプも含まれる場合があります。これらの型もインターフェイスになるようにアーキテクチャをリファクタリングする必要があり、理想的には 1 つまたはいくつかのアセンブリに含まれます。次に、プラグイン インターフェイス アセンブリとその他のスリム インターフェイス アセンブリをクライアントに提供するだけです。

ところで、MEF を調べましたか。数年前は CodePlex プロジェクトでしたが、現在は .NET ベースの一部になっています。このようなアーキテクチャを分離する便利な方法を提供します。 リンク属性を使用[Export(...)]し て、その検出を構成するだけです。[Import(...)]MEF は、IoC/依存性注入フレームワークとしても機能します。

于 2013-04-16T23:03:05.463 に答える
0

クライアント アプリケーションのビルド方法を制御でき、不足しているアセンブリをクライアントにデプロイできる場合は、ビルド中に参照を自動解決できます。

それ以外の場合は、メイン アセンブリを書き直してすべての参照コードを含めるか、ILMergeを使用して複数のアセンブリを 1 つに結合する必要があります。

于 2013-04-16T22:35:33.043 に答える