动态绑定将找不到肯定存在的属性

时间:2012-03-16 22:05:18

标签: c# dynamic

我编写了一些使用dynamic的代码,该代码在从单元测试程序集 A

运行时有效
var obj = (IDomainObjectMapConfigurer)Activator.CreateInstance(domainObjectType);
dynamic mapper = obj.CreateMapping();
var map = mapper.Map; // the line that fails in the assembly _B_

当我从单元测试程序集 B 运行它时,它失败并显示Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : 'XYZ.DomainObjectMapper' does not contain a definition for 'Map'

一些背景:IDomainObjectMapConfigurer.CreateMapping()返回一个抽象类DomainObjectMapper,它的唯一具体实现如下:

public class DomainObjectMapper<TDomainObject> : DomainObjectMapper
{
    public Action<IDomainObjectMap<TDomainObject>> Map { get; private set; }

    public DomainObjectMapper(Action<IDomainObjectMap<TDomainObject>> map)
    {
        SetMap(map);
    }

    public void SetMap(Action<IDomainObjectMap<TDomainObject>> map)
    {
        Map = map;
    }
}

我一直在看这个问题好几个小时,我无法弄清楚为什么从汇编 A 调用它而不是从 B 调用它。

需要考虑的一个异常现象是,在某个时间点,我确实已将程序集 B .NET 3.5兼容,但后来又将其切换为4.0。

修改

我还应该提一下,我可以在mapper.Map上停止调试器并观察Map属性是否存在。 mapper.GetType().GetProperties()[0].Name也是“地图”

虽然没关系,但一切都在编译为x64(而不是AnyCpu

0 个答案:

没有答案