C# Castle Windsor XML配置找不到类型

C# Castle Windsor XML配置找不到类型,c#,castle-windsor,C#,Castle Windsor,我通常使用(流畅的)代码注册组件,但现在需要通过XML注册某些类型。该文件如下所示:- <?xml version="1.0" encoding="utf-8"?> <configuration> <components> <component service="MyNamespace.IFoo, MyAssembly" type="MyNamespace2.ConcreteFoo, MyAssembly2"

我通常使用(流畅的)代码注册组件,但现在需要通过XML注册某些类型。该文件如下所示:-

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <components>
    <component service="MyNamespace.IFoo, MyAssembly"
               type="MyNamespace2.ConcreteFoo, MyAssembly2"
               lifestyle="transient" />
  </components>
</configuration>
然而,这是一个
Castle.MicroKernel.subsystem.Conversion.ConverterException
:-

无法将字符串“MyNamespace2.ConcreteFoo,MyAssembly2”转换为类型。程序集MyAssembly2,版本=1.0.0.0,区域性=中性,PublicKeyToken=null已匹配,但它不包含类型。确保类型名称没有输入错误

为了确保我没有发疯,我在上面一行之前添加了以下代码:-

var test=AppDomain.CurrentDomain.getAssemblys()

断点确认所讨论的程序集位于当前AppDomain中,并且所讨论的具体类型位于该程序集的“DefinedTypes”中。它也是公开的

这应该是一件直截了当的事情,但我现在正在挠头

编辑

我应该指出,包含具体类型的程序集是在运行时加载的(使用MEF),并且存在于与应用程序的exe不同的文件夹中(因此我不能在XML文件中使用
)。然而,我假设它存在于AppDomain中,那么我所做的应该是可行的。或者Windsor正在做一些奇怪的事情,比如再次尝试从文件加载程序集,而不仅仅是查看AppDomain

编辑2

作为一个实验,我刚刚尝试了这行代码:-

container.Register(Classes.FromAssemblyNamed("MyAssembly2").BasedOn<IFoo>());
container.Register(Classes.fromsassemblyNamed(“MyAssembly2”).BasedOn());

这会引发一个FileNotFoundException,支持我之前的预感,即Windsor正在尝试从文件加载程序集,而不是签入AppDomain。这是为什么?

看看,一个快速的问题跳了出来:您的程序集的实际名称是否以“System”开头?如果是这样的话,它看起来会被跳过。@PatrickQuirk在快速查看了Windsor源代码后注意到了我自己,但不是。这太容易了:)在这一点上,如果是我,我会启动并开始遍历Windsor代码。你没有发布类ConcreteFoo的定义。它是公共的吗?@maxlego是的,它是公共的
container.Register(Classes.FromAssemblyNamed("MyAssembly2").BasedOn<IFoo>());