使用 Castle Windsor 从使用 .net 2.0 组件的 .net 4.0 应用程序获取“ComponentActivatorException”

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

我有一个正在 VS2010 中开发的应用程序,并通过配置文件使用 Castle-Windsor IoC。

我正在注册的组件之一(也是在 VS2010 中开发的)引用了 .net 2.0 组件 (LeadTools),因此无法重新编译 2.0 项目。包装组件的注册完成后,会引发“ComponentActivatorException”,其中包装“System.TypeInitializationException”,而“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”造成的,根据 微内核文档. 。从 App.Config 文件中删除所有这些元素就可以实例化组件,无论它们是否已在 Windsor 容器中注册。

其他提示

我假设你通过XML使用注册?

如果您在代码中注册的组件会发生什么?

您可以尝试重现该问题没有错误?

呼叫Type.GetType("assembly qualified name of the type from .net 2.0 assembly");

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top