.net 2.0 コンポーネントを使用する .net 4.0 アプリケーションから Castle Windsor を使用して「ComponentActivatorException」を取得する
-
21-09-2019 - |
質問
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");