Пример кода ниже происходил естественным образом. Внезапно мой код был очень неприятным звуком FatalExecutionEngineError
. Я потратил 30 минут, пытаясь изолировать и свести к минимуму образец преступника. Скомпилируйте это с помощью Visual Studio 2012 в качестве консольного приложения:
class A<T>
{
static A() { }
public A() { string.Format("{0}", string.Empty); }
}
class B
{
static void Main() { new A<object>(); }
}
Должно возникнуть эта ошибка в .NET framework 4 и 4.5:
Является ли это известной ошибкой, в чем причина и что я могу сделать для ее смягчения? Моя текущая работа заключается в том, чтобы не использовать string.Empty
, но я лаяю неправильное дерево? Изменение чего-либо в этом коде делает его функцией, как и следовало ожидать - например, удаление пустого статического конструктора A
или изменение параметра типа от object
до int
.
Я пробовал этот код на своем ноутбуке, и он не жаловался. Тем не менее, я попробовал свое основное приложение, и он тоже упал на ноутбуке. Я, должно быть, что-то убрал, уменьшив проблему, посмотрю, смогу ли я понять, что это было.
Мой ноутбук разбился с тем же кодом, что и выше, с фреймворком 4.0, но основные сбои даже с 4.5. Обе системы используют VS'12 с последними обновлениями (июль?).
Дополнительная информация:
- IL Code (скомпилированный Debug/Any CPU/4.0/VS2010 (не то, что IDE должна иметь значение?)): http://codepad.org/boZDd98E li >
- Не видел VS 2010 с 4.0. Не сбой с/без оптимизации, другой целевой процессор, отладчик, прикрепленный/не подключенный, и т.д. - Tim Medora
- Сбой в 2010 году, если я использую AnyCPU, отлично подходит для x86. Сбой в Visual Studio 2010 SP1 с использованием Platform Target = AnyCPU, но отлично с Platform Target = x86. У этого аппарата также установлен VS2012RC, поэтому 4.5 возможно замена на месте. Используйте AnyCPU и TargetPlatform = 3.5, после чего он не падает, поэтому выглядит как регрессия в Framework.- colinsmith
- Невозможно воспроизвести на x86, x64 или AnyCPU в VS2010 с 4.0. - Fuji
- Только для x64, (2012rc, Fx4.5) - Хенк Холтерман
- VS2012 RC на Win8 RP. Изначально не видел этот MDA при настройке .NET 4.5. При переключении на таргетинг на .NET 4.0 появился MDA. Затем, после перехода на .NET 4.5, MDA остается. - Wayne