System.BadImageFormatException возникла при сборке в режиме выпуска
Я ссылаюсь на исполняемый файл в DLL. При запуске в режиме отладки все работает нормально, но при запуске в режиме выпуска ниже выдается исключение
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.
2 ответа
Больше, чем режим отладки / выпуска, я скажу, что это проблема 32 или 64 бита. Вероятно, у вас есть целевая платформа для режима отладки до автоматического режима и для режима выпуска до 32/64 битов, и вы используете dll, который составляет только 32 или 64 бита, поэтому в режиме отладки (целевой автомат платформы).NET может " выберите "между 32 и 64 битами, чтобы быть совместимым с dll, в то время как в Release (цель платформы 32 или 64 бит) это невозможно.
(обратите внимание, что если у вас есть несколько проектов в одном решении, вы должны проверить все свойства проектов для этого! Это в свойствах каждого проекта, Build, Platform target)
Я столкнулся с этим (или что-то подобное) вчера тоже. Режимы Debug и Release установлены в AnyCPU, но исполняемый файл ссылается на 32-битную DLL. Во время отладки исполняемый файл по умолчанию выглядит как 32-битный (я полагаю, потому что Visual Studio 32-битный), но в режиме выпуска он переключается на 64-битный (я полагаю, потому что мой компьютер 64-битный). Поэтому, когда я заставляю его всегда быть 32-битным (x86), все должно работать и работает отлично! Надеюсь, это помогло!