2015-02-25 12 views
1

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

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: 

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

ответ

6

Больше, чем режим отладки/освобождения. Я скажу, что это проблема 32-го и 64-битного. Возможно, у вас есть целевая платформа для режима отладки в Auto и для режима Release до 32/64 бит, и вы используете DLL, которая составляет всего 32 или 64 бита, поэтому в режиме Debug (Platform target Auto) .NET может «выбрать» между 32 и 64 битами для совместимости с dll, в то время как в Release (платформа 32 или 64 бит) он не может.

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

+0

Возможно, это наоборот. Предполагая, что OP имеет 64-битный процесс, а exe - только 32 бит, вы получаете эту проблему, когда DEBUG установлен на 32 бит, а RELEASE - на авто. –

+0

Я проверил свойства каждого проекта, и все было одинаково. Но когда я открыл диспетчер конфигурации, были различия в битности. Благодаря!!! – Sameer

+0

Я просто хотел отметить. Я просто часами боролся с этой ошибкой. Я не внес никаких изменений, кроме установки VS 2017, с которой все сразу работало. Я использую 2015. Вернулся через пару часов и имел эту ошибку. Я очистил раствор много раз и перестроил. Получил последнее время от TFS и, наконец, из-за синего, он начал работать после получения последних, как в 10-й раз. Последняя регистрация была моей. Я серьезно верю, что в VS есть ошибка. – user3478586

0

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