0

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

我正在注册的组件之一,也是在 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 中注册,这可以正常工作,但是,它似乎确实忽略了其他指令。

谢谢!

4

2 回答 2

0

我假设您正在通过 XML 使用注册?

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

您可以尝试无错误地重现该问题吗?

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

于 2010-02-17T00:22:57.360 回答
0

根据MicroKernel 文档,问题是由于在配置文件中使用了“define”和“if” 。从 App.Config 文件中删除所有这些元素允许对组件进行实例化,无论它们是否已在 Windsor 容器中注册。

于 2010-02-18T03:17:38.807 回答