Нечетное поведение отладчика с интерфейсом и дженериками на 64-битной ОС при переключении "Предпочитайте 32-битный
Я столкнулся с этим странным поведением: когда настройки моих проектов установлены на 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, оно, по-видимому, связано с размером большой структуры.
Что я делаю неправильно, что вызывает это поведение?
Ответы
Ответ 1
Для тех, кто сталкивается с этим вопросом, ища решение, процитируйте Tom из команды Microsoft:
Похоже, что это связано с ошибкой, которая исправлена в .NET Framework 4.5.2. Мы можем убедиться, что проблема связана с отключением функции управляемого возвращаемого значения. Я разместил инструкции для этого в разделе "Обходные пути".
Эта проблема вызвана кодом, который собирает возвращаемые значения. это можно обойти проблему, отключив управляемые возвращаемые значения.
- Перейдите к свойствам системы (Win8: WinKey + X, выберите "Система, Win7: Открыть" Свойства с моего компьютера)
- Расширенные настройки системы
- Переменные среды...
- Нажмите "Создать" и добавьте
- Имя: VSDebug_DisableManagedReturnValue
- Значение: 1
Если отключить управляемые возвращаемые значения вокруг проблемы, исправление для эта проблема находится в .NET Framework 4.5.2. Это можно загрузить из http://www.microsoft.com/en-us/download/details.aspx?id=42642. Установка 4.5.2 - это все, что необходимо для устранения проблемы.