Исключение System.BadImageFormatException возникло при сборке в режиме выпуска

Я ссылаюсь на exe-файл в dll. При запуске в режиме DEBUG все работает нормально, но при запуске в режиме выпуска возникает исключение

System.BadImageFormatException occurred
  HResult=-2147024885
  Message=Could not load file or assembly 'Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
  Source=Presensoft.ApplicationServer
  FileName=Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  FusionLog==== Pre-bind state information ===
LOG: DisplayName = Presensoft.InlineMarker, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/
LOG: Initial PrivatePath = NULL
Calling assembly : Presensoft.ApplicationServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: F:\PresensoftNewTrunk\Trunk\Email Archiver\EmailService\Presensoft.ApplicationServerHost\bin\Release\Presensoft.ApplicationServerHost.vshost.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker.DLL.
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker/Presensoft.InlineMarker.DLL.
LOG: Attempting download of new URL file:///F:/PresensoftNewTrunk/Trunk/Email Archiver/EmailService/Presensoft.ApplicationServerHost/bin/Release/Presensoft.InlineMarker.EXE.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

  StackTrace:
       at Presensoft.ApplicationServer.ExchangeServer2010Push.PostProcessingEmailsQueue()
       at Presensoft.ApplicationServer.ExchangeServer2010Push.RunPushService(Guid appServerID) in f:\PresensoftNewTrunk\Trunk\Email Archiver\EmailService\Presensoft.ApplicationServer\ExchangeServer2010Push.cs:line 48
  InnerException: 

Не уверен, есть ли какая-то проблема с проверкой exe-файла при работе в режиме RELEASE.


person Sameer    schedule 25.02.2015    source источник


Ответы (2)


Я скажу, что это больше, чем режим отладки / выпуска, это проблема 32 и 64 бит. Вероятно, у вас есть целевая платформа для режима отладки на автоматический и для режима выпуска на 32/64 бита, и вы используете dll, который имеет только 32 или 64 бита, поэтому в отладке (целевая платформа автоматически ) режиме .NET может «выбирать» между 32 и 64 битами для совместимости с dll, а в режиме выпуска (целевая платформа 32 или 64 бита) это невозможно.

(обратите внимание, что если у вас есть несколько проектов в одном и том же решении, вы должны проверить все свойства проектов для этого! Это в свойствах каждого проекта, сборки, целевой платформы)

person xanatos    schedule 25.02.2015
comment
Вероятно, все наоборот. Предполагая, что OP имеет 64-битный процесс, а exe только 32-битный, вы получаете эту проблему, когда для DEBUG установлено значение 32 бит, а для RELEASE установлено значение auto. - person Kris Vandermotten; 25.02.2015
comment
Я проверил свойства каждого проекта, и все они были одинаковыми. Но когда я открыл диспетчер конфигурации, были различия в разрядности. Спасибо!!! - person Sameer; 25.02.2015
comment
Я просто хотел отметить. Я просто часами боролся с этой ошибкой. Я не вносил никаких изменений, кроме установки VS 2017, после чего все заработало нормально. Я использую 2015. Вернулся через пару часов и обнаружил эту ошибку. Я чистил раствор тонны раз и перестраивал. Получал последнюю версию снова и снова из TFS, и, наконец, ни с того ни с сего он начал работать после получения последней версии примерно в 10-й раз. Последняя регистрация была моей. Я серьезно считаю, что в VS есть ошибка. - person user3478586; 05.10.2017
comment
Забудьте о диспетчере конфигурации. Для меня там все было идентично — все AnyCPU, как для Debug, так и для Release. Но в свойствах проекта - Build - Targetplatform в Release был установлен флаг Prefer 32 bit :-/ - person Jessica; 20.08.2019

Я столкнулся с этим (или чем-то подобным) вчера тоже. Оба режима отладки и выпуска установлены на AnyCPU, но exe ссылается на 32-разрядную dll. Во время отладки исполняемый файл по умолчанию имеет 32-разрядную версию (я предполагаю, что Visual Studio является 32-разрядной), но в режиме выпуска он переключается на 64-разрядную версию (я полагаю, потому что мой компьютер 64-разрядный). Поэтому, когда я заставляю его всегда быть 32-разрядным (x86), все должно работать и работает отлично! Надеюсь, это помогло!

person Panh    schedule 26.02.2015