Плохой формат IL - Странная ошибка .NET - PullRequest
0 голосов
/ 28 июня 2018

Я случайно получаю это сообщение об ошибке через приложение .NET в Azure.

Похоже, информация об ошибке очень ограничена, и я подумал: а кто-нибудь знает, что может быть причиной?

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

System.BadImageFormatException: Bad IL format.
 at System.Data.SqlClient.SqlConnection.ValidateAndReconnect(Action beforeDisconnect, Int32 timeout)
 at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
 at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite, String method)
 at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
 at System.Data.SqlClient.SqlCommand.BeginExecuteNonQuery(AsyncCallback callback, Object stateObject)
 at System.Threading.Tasks.TaskFactory`1.FromAsyncImpl(Func`3 beginMethod, Func`2 endFunction, Action`1 endAction, Object state, TaskCreationOptions creationOptions)
 at System.Data.SqlClient.SqlCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)

1 Ответ

0 голосов
/ 28 июня 2018

Скорее всего, это связано с несоответствием архитектуры процессора: например, загрузка 64-битных сборок при использовании 32-битной вызывает это.

Что нужно проверить:

  • Если ваше приложение использует 32-разрядные компоненты, убедитесь, что оно всегда работает как 32-разрядное приложение.
  • Убедитесь, что вы не используете компонент, созданный в другой версии .NET Framework.
  • Убедитесь, что образ файла является допустимой управляемой сборкой или модулем.

А что касается первого пункта в списке:

Если свойство Platform target для вашего проекта приложения установлено на AnyCPU , скомпилированное приложение можно запустить в 64-битном или 32-битном режиме. Когда он работает как 64-битное приложение, компилятор JIT (Just-in-Time) создает 64-битный собственный код. Если приложение зависит от 32-разрядного управляемого или неуправляемого компонента, этот компонент не сможет загружаться в 64-разрядном режиме. Чтобы устранить эту проблему, установите для свойства проекта Platform target значение x86 и перекомпилируйте.

Источник: Устранение неполадок Исключения: System.BadImageFormatException

...