.net 2.0 コンポーネントを使用する .net 4.0 アプリケーションから Castle Windsor を使用して「ComponentActivatorException」を取得する

StackOverflow https://stackoverflow.com/questions/2276033

質問

VS2010 で開発されているアプリケーションがあり、構成ファイルを通じて Castle-Windsor IoC を利用しています。

登録しているコンポーネントの 1 つは、これも VS2010 で開発されており、.net 2.0 コンポーネント (LeadTools) を参照しているため、2.0 プロジェクトを再コンパイルすることはできません。ラッピング コンポーネントの登録が完了すると、「ComponentActivatorException」が発生し、「System.TypeInitializationException」がラップされ、さらに「System.IO.FileLoadException」が「混合モード アセンブリがバージョン 'v2 に対してビルドされています」というメッセージとともにラップされます。 .0.50727' のランタイムであり、追加の構成情報がないと 4.0 ランタイムにロードできません。」

次のように、アプリケーションの構成ファイルにランタイム宣言を追加しました。

<!-- useLegacyV2RuntimeActivationPolicy is needed for LEADTools-->
<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  <supportedRuntime version="v2.0.50727" />
</startup>

これは、ラッピング コンポーネントが Windsor に登録されていない場合には正常に機能しますが、それ以外の場合はディレクティブが無視されるようです。

ありがとう!

役に立ちましたか?

解決 2

この問題は、構成ファイル内で「define」と「if」を使用したことが原因でした。 MicroKernel ドキュメント. 。App.Config ファイルからこれらの要素をすべて削除すると、Windsor コンテナに登録されているかどうかに関係なく、コンポーネントをインスタンス化できるようになります。

他のヒント

私はあなたがXML経由で登録を使用していると仮定?

あなたは、コード内のコンポーネントを登録する場合は、

はどうなりますか?

あなたがエラーなしで問題を再現しようとすることはできますか?

コールType.GetType("assembly qualified name of the type from .net 2.0 assembly");

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top