Несборочная DLL в бине

Мы пытаемся использовать ABCpdf .NET v10 от WebSupergoo. И это прекрасно работает, если мы используем их установщик. Но v8 уже установлен на сервере с другими проектами, использующими его, поэтому мы не хотим сейчас запускать установщик. (Надеюсь, в ближайшем будущем мы сможем протестировать установку на другом компьютере и / или обновить эти проекты, но этот проект не может ждать этого.)

Инструкции по "ручной установке" от WebSupergoo ( http://www.websupergoo.com/helppdfnet/default.htm?page=source%2F3-concepts%2F6-installation.htm) указывают на размещение 3 основных библиотек DLL (ABCpdf.dll)., ABCpdf10-32.dll и ABCpdf10-64.dll) в папку bin и добавьте ссылку на ABCpdf.dll.

Мы не хотим, чтобы они были в папке bin, потому что Source Control настроен так, чтобы ничего не добавлять из этой папки. Однако, чтобы заставить его работать (пока), они были помещены в эту папку. Затем, когда я пытаюсь запустить проект, я получаю следующую ошибку (имена папок изменены в целях безопасности):

 System.BadImageFormatException was unhandled by user code
  HResult=-2146234344
  Message=Could not load file or assembly 'file:///D:\\Projects\Solution\WebProject\bin\ABCpdf10-32.dll' or one of its dependencies. The module was expected to contain an assembly manifest.
  Source=mscorlib
  FileName=file:///D:\Projects\Solution\WebProject\bin\ABCpdf10-32.dll
  FusionLog==== Pre-bind state information ===
LOG: Where-ref bind. Location = D:\Projects\Solution\WebProject\bin\ABCpdf10-32.dll
LOG: Appbase = file:///D:/Projects/Solution/WebProject/
LOG: Initial PrivatePath = D:\Projects\Solution\WebProject\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: D:\\Projects\Solution\WebProject\web.config
LOG: Using host configuration file: D:\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///D:/Projects/Solution/WebProject/bin/ABCpdf10-32.dll.
ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.

  StackTrace:
       at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
       at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
       at System.Reflection.Assembly.LoadFrom(String assemblyFile)
       at WebActivator.PreApplicationStartCode.Start() in D:\Code\Bitbucket\WebActivator\WebActivator\PreApplicationStartCode.cs:line 11
  InnerException:

Наш предпочтительный метод - разместить их в папке "lib" (в настоящее время на уровне решения). Итак, я поместил 3 DLL в эту папку и добавил ссылку. Проект компилируется и запускается, но когда мы пытаемся создать PDF, мы получаем следующую ошибку:

Unable to load DLL 'ABCpdf10-32.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Поддержка WebSupergoo сообщает: "ABCpdf10-32.dll не является сборкой, поэтому, конечно, она не содержит манифест сборки".

Я попытался извлечь ABCpdf10-32.dll из папки bin, и я получаю ту же ошибку с ABCpdf10-64.dll.

Я попытался установить "Копировать локальный" со ссылкой на False. Без изменений.

Копировать локально: https://msdn.microsoft.com/en-us/library/t1zz5y8c(v=vs.90).aspx

Я пытался использовать технику "Зондирование". Я попытался сделать это в файле web.config и app.config для проекта (там, похоже, нет решения для решения). Я также попытался переместить папку lib в сам проект. Без изменений.

Зондирование: https://msdn.microsoft.com/en-us/library/823z9h8w(v=vs.110).aspx

Я не уверен, что еще можно попробовать на этом этапе. Любая помощь будет принята с благодарностью!

1 ответ

System.BadImageFormatException - это общее исключение, которое используется, когда вы используете 32-битную DLL в 64-битной среде или наоборот.

Веб-приложения: они используют для загрузки всех библиотек в папке, используется или нет (WebActivator.PreApplicationStartCode.Start()). Проверьте пул IIS, он 64-битный? Затем удалите все 32 DLL на папку или подпапки. Вы заставляете это к 32? Затем удалите все 64 DLL на папку или подпапки.

Другие вопросы по тегам