System.ExecutionEngineException Failure - PullRequest
35 голосов
/ 09 июня 2009

Я пытался узнать больше об этой проблеме, и мне не повезло. Я продолжаю читать, что в приложениях не должно появляться этой ошибки, и, хотя это нормально, это не говорит мне, что может вызвать появление этой ошибки.

Я знаю, что этот вопрос очень широкий, так как я уверен, что для этой ошибки может быть несколько причин, поэтому я постараюсь немного ее сузить.

Я работаю в VS2003 над разработкой приложения, которое использует C ++. NET

Приложение использует в основном неуправляемый код и мало управляемый код (из-за сильного вмешательства сборщика мусора). Так что я бы оценил 95% неуправляемых, 5% управляемых

Я где-то читал, что нестабильный / глючный / неправильный неуправляемый код может испортить части памяти CLR, делая его поврежденным и выдавая эту ошибку.

Поскольку 95% приложений неуправляемые, я не уверен, с чего начать. Может быть, несколько классов, которые взаимодействуют между управляемым и неуправляемым? Как насчет сортировки данных от управляемых к неуправляемым? Может ли неправильный нулевой указатель вызвать этот сбой? Какие другие проблемы могут вызвать это? Индекс массива вне границ? А как насчет нулевого объекта?

Любая информация / статья / статья, которая может дать хороший список возможных причин сбоя System.ExecutionEngine, будет принята!


Исходя из ответов, это исключение может быть вызвано несколькими сценариями, упомяну htem в ответе для лучшей наглядности.

Список возможных причин / сценариев -

Возможные обходные пути / решения -

Ответы [ 26 ]

0 голосов
/ 07 июля 2011

Я добавлю, как я ударил это.

Используя контакты с кодом .Net 4, Contract.Ensures(Contract.Result<object>() != null) сгенерирует это исключение, если у вас есть Проверка на провал контракта на странице свойств проекта для кодовых контрактов. Отключение этого флажка не отключает проверку однако. Вы получите ожидаемое сообщение «Ошибка условия публикации».

0 голосов
/ 18 июня 2010

У меня было исключение при запуске неуправляемого кода в другой версии, чем я скомпилировал.

Может быть, это кому-нибудь поможет ...

0 голосов
/ 30 сентября 2010

Я только что столкнулся с этим исключением при написании программы на c # с использованием Unity Framework .

Я использую VS 2010 и .NET 3.5

В основном, если вы регистрируете тип в UnityContainer:

container.RegisterType<IAClass, AClass>();

но AClass не имеет конструктора, который не принимает аргументов

class AClass : IAClass
{
   private int a;
   public in A { get { return a; } }
   public AClass(int a)
   {
       this.a = a;
   }
}

затем, когда вы придете к экземпляру класса, вы получите System.ExecutionEngineException

IAClass A = container.Resolve<IAClass>(); //throws System.ExecutionEngineException
0 голосов
/ 02 августа 2010

У меня было такое, и это было потому, что я звонил ::FreeLibrary() несколько раз с одной и той же ручкой DLL. (DLL была управляемой C ++ dll: управляемой оболочкой C ++ над некоторыми функциями C #)

0 голосов
/ 07 октября 2016
  1. Создание нового приложения для веб-форм

  2. Открыть любую страницу (скажем, Default.aspx)

  3. Добавить GridView в форму

  4. Нажмите на GridView, затем на маленькую стрелку (верхний правый угол). При нажатии «Изменить столбцы» или «Добавить новый столбец» или «Источник данных> Новый источник данных» происходит сбой Visual Studio 2015 с System.ExecutionEngineException в mscorlib.dll

0 голосов
/ 29 ноября 2011

Я получаю это исключение при просмотре PDF-файлов с помощью внешнего средства просмотра. Я думаю, что сам зритель является корнем всего зла. Это должно быть что-то вне платформы .NET, очевидно.

...