Загрузка gsdll64.dll из (a) GhostScriptAPI внезапно выдает исключение BadImageFormatException

#c# #asp.net #.net #ghostscript

#c# #asp.net #.net #ghostscript

Вопрос:

Я установил GhostScript 9.19 x64 примерно месяц назад для использования в веб-приложении .NET 4, и с тех пор он отлично работает.

После недавней проверки системы управления версиями (первой с момента установки GS) моя оболочка GhostScriptAPI теперь выдает BadImageFormatException

введите описание изображения здесь

 [DllImport("c:\gsdll64.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int gsapi_new_instance(out IntPtr lngGSInstance, IntPtr lngCallerHandle);

intReturn = gsapi_new_instance(out intGSInstanceHandle, callerHandle);
  

Несмотря на то, что приложение настроено на «Любой процессор», оно не сможет загрузиться с помощью a BadImageFormatException , если явно задано значение x64, так что на самом деле оно нацелено на x86.

введите описание изображения здесь

Я понимаю, что мне нужно использовать версию GhostScript для x86 (gsdll32.dll ) или заставить мое приложение работать на x64, однако мой вопрос в том, как GhostScript работал заранее, пока мое приложение и оно были нацелены на две разные платформы (удача, магия, божественное вмешательство)?

Комментарии:

1. Существует флаг «предпочитаю 32-разрядный», посмотрите, установлен ли он.

2. Просто небольшой толчок здесь, вы знаете о том факте, что Ghostscript имеет лицензию AGPL?

3. @KenS Похоже, я нарушаю?

4. @LasseV.Karlsen Предпочитает, чтобы 32-разрядная версия была снята и отключена (спасибо). Я только что добавил условные флаги WIN32 / WIN64 и заметил, что при ориентации на любой процессор весь код в #if WIN32 ветке отображается серым цветом. Итак, теперь я подозреваю, что по умолчанию VS хочет настроить таргетинг на x64 (моя машина и ОС — x64) и думает, что это произойдет, но затем, возможно, столкнется с чем-то во время сборки, что заставит его переключиться на x86. Однако это «переключение» должно произойти после #if WIN32 сбоя препроцессора, иначе условные флаги никогда не обновляются после его возникновения.

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