Castle Windsor XML配置找不到类型

And*_*ens 5 c# castle-windsor

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <components>
    <component service="MyNamespace.IFoo, MyAssembly"
               type="MyNamespace2.ConcreteFoo, MyAssembly2"
               lifestyle="transient" />
  </components>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码注册类型: -

container.Install(
    Castle.Windsor.Installer.Configuration.FromXmlFile(filename));
Run Code Online (Sandbox Code Playgroud)

然而,这有一个Castle.MicroKernel.SubSystems.Conversion.ConverterException: -

无法将字符串'MyNamespace2.ConcreteFoo,MyAssembly2'转换为类型.程序集MyAssembly2,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null匹配,但它不包含类型.确保类型名称没有错误输入.

为了确保我没有发疯,我在上面的行之前添加了这段代码: -

var test = AppDomain.CurrentDomain.GetAssemblies();

断点确认有问题的程序集位于当前AppDomain中,所讨论的具体类型位于此程序集的"DefinedTypes"中.它也是公开的.

这应该是一件很简单的事情,但我现在正在挠头!

编辑

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

编辑2

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

container.Register(Classes.FromAssemblyNamed("MyAssembly2").BasedOn<IFoo>());
Run Code Online (Sandbox Code Playgroud)

这会抛出一个FileNotFoundException,备份我之前的预感,即Windsor正试图从文件加载程序集而不是检查AppDomain.为什么是这样?