Не удается загрузить библиотеки DLL при запуске размещенного веб-проекта IIS Express (VS2015) - PullRequest
0 голосов
/ 31 августа 2018

Backgroud:

Я нахожусь в процессе миграции консольного приложения, чтобы стать частью нашего существующего проекта веб-API. Вся работа по разработке выполняется на Visual Studiod 2015 (с IIS Express). Приложение использует несколько сторонних API-интерфейсов API источника данных для получения данных из этого источника данных. Все эти библиотеки управляются нашими внутренними источниками пакетов nuget.

Проблема:

Теперь консольное приложение работает нормально и может загрузить эти библиотеки DLL. Я скопировал логику в свой веб-проект и добавил библиотеки DLL через Nuget. Решение собирается, но при запуске веб-проекта появляется следующая ошибка:

Could not load file or assembly 'ABC.DLL' or one of its dependencies. The specified module could not be found. 

Где ABC.DLL - одна из сторонних DLL.

Я сделал следующее:

  • Подтвердите, что ABC.DLL находится в папке bin моего веб-проекта
  • Изменена целевая платформа сборки моего веб-проекта на x86 и снята отметка «Использовать 64-битную версию IIS Express для веб-сайтов и проектов» в VS2015 (сторонняя dll - 32-битная)
  • Запустил dumpbin.exe на зависимости ABC.DLL и получил XYZ.dll , MSVCR120.dll, KERNEL32.dll, MSVCP120.dll, mscoree.dll

Что касается последнего шага, то все dll отсутствовали в папке bin (но последние 4 DLL должны быть в каталоге win32 system32, поэтому это не должно иметь значения?)

Что касается XYZ.dll, это еще одна сторонняя библиотека, которая находится в папке C: \ Program Files (x86) \ XYZ \. Я вручную скопировал его в папку bin веб-проекта (фактически скопировал все Dlls в папке XYZ) и все еще получаю ту же проблему.

Вопросы

  • Что мне здесь не хватает? Консольное приложение, очевидно, может загружать ABC.DLL, но веб-проект не может. Цените это, если вы можете сказать мне, что проверить дальше.
  • Сообщение об ошибке при запуске веб-страницы не очень полезно, есть ли способ узнать, где веб-проект пытается загрузить сторонние библиотеки DLL?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я наконец нашел проблему и спасибо за всю помощь, мне пришлось отключить теневое копирование в VS (упомянуто в 64-битной управляемой сборке с неуправляемыми зависимостями, не загружающимися в IIS / ASP.NET MVC 4 ) .

0 голосов
/ 31 августа 2018

Простое добавление внешних DLL в вашу папку Bin - не самая лучшая идея. Файлы могут исчезать из этой папки по разным причинам, например, из-за того, что члены вашей команды удаляли, казалось бы, бесполезную DLL-библиотеку, или через очистку Visual Studio. Кроме того, выходные DLL-файлы из ссылочных проектов в вашем решении окажутся там и будут заменяться каждый раз, когда вы создаете свой проект.

Что вы должны сделать для сторонних библиотек DLL, это создать некоторую папку "зависимостей" в вашем проекте или рядом с ним и вставить туда библиотеки DLL. Затем вы должны щелкнуть правой кнопкой мыши по проекту, выбрать «Добавить ссылку», перейти к этой новой папке «зависимостей» и таким образом добавить ссылку на DLL. Это похоже на работу NuGet; он хранит библиотеки DLL в соответствующих папках внутри папки пакетов и добавляет ссылки на эти библиотеки DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...