Для приложения .Net C #, которое использует SAP.DATA.HANA.v4.5
v2.3.119 и установлено на машине времени выполнения с libadonetHDB.dll
v2.3.119 с переменной среды HDBADONET
, указывающей на папку приложения, в которой существует libadonetHDB.dll
.Приложение работает, как и ожидалось, на нескольких установках, однако одна новая установка, которую я вижу, не может создать Указанный модуль не может быть найден Ошибка исключение из HanaConnection ниже:
The type initializer for 'Sap.Data.Hana.HanaConnection' threw an exception.
System.Exception: The specified module could not be found
at Sap.Data.Hana.HanaUnmanagedDll.LoadDll(String dllPath)
at Sap.Data.Hana.HanaUnmanagedDll..ctor()
at Sap.Data.Hana.HanaUnmanagedDll.get_Instance()
at Sap.Data.Hana.HanaConnection..cctor()
Также попытался просто переместить dll в ту же папку, где установлено приложение, и получены те же результаты.
Согласно документации , dll находится вдолжна работать та же папка, что и приложение, или через путь к переменной среды HDBADONET
(и она работала на нескольких других установках).Это часть общего рабочего процесса разработки и использования библиотеки ADO.NET для не родных приложений .NET , документированных здесь
Я пробовал это как пользователь "Администратор" иэто новая виртуальная машина, созданная (опробована как новая Windows10 x64 VM, так и новая Windows Server 2016 x64 VM).Также подтверждено, что был установлен .NET v4.5 +.
Возможно ли, что у машины могут быть разрешения или другая политика, влияющая на загрузку dll?
Любая подсказка, почему SAP HanaЗагрузка DLL соединения ADO.NET с БД не удастся, но не во всех случаях?
libadonetHDB.dll
все еще пытается найти и загрузить libSQLDBCHDB.dll
или другой dll на машине по какой-то причине?Насколько я понимаю, использование ADO.NET DLL позволило машине не требовать установки другого клиента и установки dll.
Какой именно module
не может быть найден специально?Есть ли способ заставить загрузку DLL Hana Connection генерировать более подробный вывод при сбое?
Обновление
Чтобы подтвердить, что libadonetHDB.dll
действительно найден с помощьюопределение переменной среды HDBADONET
, я удалил файл и перепроверил, и я получил другое сообщение:
The type initializer for 'Sap.Data.Hana.HanaConnection' threw an exception.
System.IO.FileNotFoundException: Cannot find a matching libadonetHDB.dll
with version 2.3.119 - check the location in the HDBADONET or PATH
environment variables
at Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls()
at Sap.Data.Hana.HanaUnmanagedDll..ctor()
at Sap.Data.Hana.HanaUnmanagedDll.get_Instance()
at Sap.Data.Hana.HanaConnection..cctor()
Итак, сообщение, опубликованное в оригинальном сообщении, приходит после того, как libadonetHDB.dll
было успешно найдено.Таким образом, похоже, что жалоба в сообщении об исключении о невозможности найти или загрузить модуль ссылается на какой-либо другой ресурс или dll, которую он ищет, но сообщение недостаточно подробное, чтобы знать, что это такое.Есть идеи?
Обновление (решение)
Краткий ответ:
Проверка libadonetHDB.dll
с Зависимости показывает, чтоmsvcr100.dll
и msvcp100.dll
оба отсутствовали на машине времени выполнения по какой-то причине.Добавление этих недостающих библиотек DLL в установочный пакет приложения решило проблему.
Более длинный ответ:
Спасибо donjuedo за предложение опросить библиотеку DLL, чтобы увидеть ее зависимости.Инструмент, который я использовал на компьютере, на котором произошел сбой, - Зависимости (для работы которого требуется установка распространяемого пакета x64 для vc ++, как указано в файле readme), обнаружил, что msvcr100.dll
и msvcp100.dll
оба отсутствовали какзависимости при проверке libadonetHDB.dll
.Обратите внимание, что они были обнаружены только на этой конкретной машине, которая была только что созданной виртуальной машиной, поэтому на этой машине должен был проводиться тест и проверка.
Решением для включения отсутствующих библиотек DLL во время установки может быть добавление msvcr100.dll
и msvcp100.dll
в любое из следующих мест:
C:\Windows\System32
(вероятно, непредпочтительное решение, если вы хотите, чтобы ваше приложение не устанавливало вещи в основную системную папку) - папка, в которой также существует exe приложения
- подпапка lib приложения, если вы добавляете путь к нейвложенная папка для определения переменной среды
PATH
(т. е. set PATH=%PATH%;fullpath\to\app\lib
)
Эти две библиотеки уже были на нашей машине для разработки и, вероятно, уже являются частью многих машин времени выполнения / клиентов, которые уже давно работали и имели другое программное обеспечение, которое им требовалось.Если у вас их нет даже в разработке, загрузите их из официальных пакетов Microsoft, как указано здесь (избегайте получать их с сторонних веб-сайтов DLL, если хотите быть уверенными, что они не являются вредоносными программами, скрывающимися в DLL).).В идеале в документации по библиотеке SAP HanaDB ADO.NET должны быть указаны требования к машине времени выполнения или то, что разработчик .NET должен предоставить эти зависимые библиотеки DLL.