gpt4 book ai didi

debugging - 为什么使用 Moq 创建的模拟实例会抛出 System.BadImageFormatException?

转载 作者:行者123 更新时间:2023-12-03 08:13:28 25 4
gpt4 key购买 nike

这个问题可能与another有关问题,它肯定会导致 System.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 调试测试时。当我越过上面的行时,System.Reflection.Emit 通过 CaSTLe.DynamicProxy 抛出 System.BadImageFormatException。这可能类似于 something Ayende Rahien 发布了吗?

现在的解决方法是为 IFooRepo 实现一个假,但我很好奇为什么会为这种场景生成一个糟糕的图像,是否有修复? System.Reflection.Emit 有问题吗?或者我在自己的代码中遗漏了一些明显的东西?

编辑 : 为 GetFoo() 发布了错误的签名。更正了 GetFoo () 的签名,从而正确重现了问题。安装 GDR 后,此问题仍然存在。

编辑 : 似乎如果对 F 的约束包括类型参数 T BadImageFormatException 会引发。但我把它改成,比如说 where F : class, new() ,然后一切都按预期进行。

最佳答案

FWIW,我同意 Ayende 的帖子解释了这种行为,并且仅当对一个通用参数的约束引用另一个时才会发生这种情况。我在 GDR 中也遇到了它,并采用了相同的手工编码假货解决方法。

关于debugging - 为什么使用 Moq 创建的模拟实例会抛出 System.BadImageFormatException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com