0

Visual Studio 2008 で次の設定に問題があります: エントリポイントの Main() メソッド クラスを含み、インターフェイスを宣言する親プロジェクトと、親プロジェクトで宣言されたインターフェイスを実装するクラスを持つ子プロジェクト。

親の出力タイプがコンソール アプリケーションであり、子の出力タイプがクラス ライブラリであることを指定しました。Child では、プロジェクトとして親への参照を追加し、子が親に依存し、ビルド順序が親、次に子になるように指定しました。

ビルドは成功し、私が知る限り、Child/bin/debug ディレクトリに適切なもの (Parent.exe と Child.dll) が表示されます。

ただし、Parent.exe を実行すると、Child.dll からクラスをロードする必要がある時点で、次のエラー メッセージが表示されて失敗します。

例外実行操作 System.TypeLoadException: アセンブリ 'Parent、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' から型 'Child.some.class' を読み込めませんでした。

親プロジェクトと子プロジェクトを一緒にプレイする方法について、私は混乱していると思います。親でセットアップされたものと同じフレームワークを使用する子プロジェクトをさらに作成する予定であるため、エントリポイント クラスを子プロジェクトに移動したくありません。子プロジェクトもコンソール アプリケーションであると指定しようとすると、子プロジェクトに Main() エントリポイント クラスがないため (親プロジェクトが参照として含まれていても)、ビルド プロセスは失敗します。

どんな助けでも大歓迎です!ありがとう、マーティン

4

3 に答える 3

2

一般に、階層を逆にしたい: .exe プロジェクトは、サテライト アセンブリ プロジェクト ("子" と呼んでいるもの) に依存する必要があります。次に、サテライト アセンブリで型を使用するために、.exe プロジェクトからアセンブリ プロジェクトへの参照を追加します。これを行うには、VS のソリューション エクスプローラーで .exe プロジェクトを右クリックし、[参照の追加] を実行します。[プロジェクト] タブをクリックして、アセンブリ プロジェクトを選択します。

編集:プロジェクト全体の「フレームワーク」を(インターフェイスまたは基本クラスを定義して)セットアップする場合は、単一のコアアセンブリでそれを行うことから始めます。それらの定義を MyProject.Core.dll のようなものに入れます。次に、「実装」プロジェクト/アセンブリには、 MyProject.Core プロジェクトへの参照があります。以上のことから、IOC / DI フレームワークのようなものを探しているかもしれません。NinjectStructureMapCastle Windsorなどを参照してください。

于 2010-03-29T21:12:04.533 に答える
0

ですから、自分の質問に答えるという素晴らしい伝統の中で、電話をかけるGetType()には正しいアセンブリを指定する必要があると考えました。各プロジェクトは、独自のアセンブリ(、、、および)にコンパイルさApplication.exeInterface.dllますImplementation.dll。したがって、クラス内で実装クラスをインスタンス化するには、次のApplication Main()ように呼び出す必要があります。

Type actionType = Type.GetType("ImplementationClass", "Implementation", true);

少しおかしなように見えますが、少なくとも機能します。

于 2010-03-31T02:02:59.257 に答える
0

循環依存を避けたい。

インターフェイスと実装を分離したい場合は、「子」アセンブリ (クラス ライブラリ) によって使用される 3 番目のアセンブリ (クラス ライブラリ) でインターフェイスを定義し、アプリケーションからインターフェイスと実装の両方を使用します。

于 2010-03-29T21:24:08.203 に答える