我遇到了一个奇怪的行为:当我的项目设置为
我已经将它简化为以下控制台应用程序的形式:
Any CPU
和 Prefer 32-bit
,在一个 64位 Windows 7 操作系统
上运行时,下面的 .Net 4.5
程序按预期工作。但是,如果我关闭 Prefer 32-bit
,然后通过程序步进,我会发现代码永远不会进入接口实现,但也不会抛出任何错误。我已经将它简化为以下控制台应用程序的形式:
namespace BugCheck
{
interface IBroken
{
bool Broken<TValue> (TValue gen, Large large);
}
class Broke : IBroken
{
public bool Broken<TValue> (TValue gen, Large large )
{ return true; }
}
struct Large
{
int a, b, c;
}
class Program
{
static void Main (string[] args)
{
//32bit can step in. 64bit can't
((IBroken)new Broke()).Broken(1, new Large());
}
}
}
正如预期的那样,当切换到偏好32位
时,程序会在.net 32位程序集和64位程序集之间交替 - 在32位程序集中按预期工作,在64位程序集中“默默地崩溃”。
正如@Athari所建议的那样,这似乎与大型结构体的大小有关。
是我做错了什么导致了这种行为?