这个问题可能与另一个问题有关,它肯定会导致System.BadImageFormatException的出现。也许是同样的问题,只是表现形式不同?
我有以下代码:
除了在使用Visual Studio 2008调试测试时,上述代码可以正常运行。当我跨越上述行时,通过Castle.DynamicProxy从System.Reflection.Emit中抛出System.BadImageFormatException异常。这可能类似于Ayende Rahien发布的某些内容吗?
现在的解决方法是实现IFooRepo的虚拟版本,但我想知道为什么会为这种情况生成错误图像,是否有修复方法? System.Reflection.Emit有缺陷吗?或者我在自己的代码中遗漏了一些明显的东西吗? 编辑:发帖时GetFoo()签名不正确。已更正签名为GetFoo<T, F>(),以正确重现问题。安装GDR后,此问题仍然存在。 编辑:看起来,如果F的约束包括类型参数T,则会引发BadImageFormatException异常。但是,如果将其更改为,例如
我有以下代码:
public interface IFoo<T> where T : class, new() {
T FooMethod(object o);
}
public interface IFooRepo {
F GetFoo<T, F>() where T : class, new() where F : IFoo<T>;
}
接下来我有一个测试,使用Moq模拟了IFooRepo的实现,代码如下:
var instance = new Mock<IFooRepo>().Object;
除了在使用Visual Studio 2008调试测试时,上述代码可以正常运行。当我跨越上述行时,通过Castle.DynamicProxy从System.Reflection.Emit中抛出System.BadImageFormatException异常。这可能类似于Ayende Rahien发布的某些内容吗?
现在的解决方法是实现IFooRepo的虚拟版本,但我想知道为什么会为这种情况生成错误图像,是否有修复方法? System.Reflection.Emit有缺陷吗?或者我在自己的代码中遗漏了一些明显的东西吗? 编辑:发帖时GetFoo()签名不正确。已更正签名为GetFoo<T, F>(),以正确重现问题。安装GDR后,此问题仍然存在。 编辑:看起来,如果F的约束包括类型参数T,则会引发BadImageFormatException异常。但是,如果将其更改为,例如
where F:class,new()
,则一切正常。