Я столкнулся с этим странным поведением: когда настройки моих проектов установлены на Any CPU
и Prefer 32-bit
на 64bit Windows 7 OS
, программа .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());
}
}
}
Как и ожидалось, при переключении Prefer 32-bit
программа будет чередоваться между 32-разрядными сборками .net и 64-битными ассемблерами - там, где она работает, как ожидается, с 32-битными ассемблиями и "разрывается тихо" с 64-битными ассемблиями.
Как было предложено @Athari, оно, по-видимому, связано с размером большой структуры.
Что я делаю неправильно, что вызывает это поведение?