Не удалось загрузить DLL «SQLite.Interop.dll»: указанный модуль не найден. Ошибка на Windows Server 2012

У меня есть многопроектное решение (C#), которое я пытаюсь развернуть на одном из наших тестовых серверов. Все проекты создаются для x64 с отключенным параметром «Предпочитать 32-разрядную версию», где это применимо.

Некоторые проекты ссылаются на набор dll SQLite, который использует расширение шифрования SQLite (не управляемое nuget). Когда я создаю и устанавливаю решение на своем локальном компьютере, приложение и служба Windows могут работать правильно, без проблем.

Когда я пытаюсь установить тот же пакет на один из наших тестовых серверов под управлением 64-разрядной версии Windows Server 2012, я получаю сообщение «Невозможно загрузить DLL «SQLite.Interop.dll»: указанный модуль не найден». всякий раз, когда я пытаюсь связаться с базой данных SQLite. Я трижды проверил, что все подходящие библиотеки DLL находятся в папке программы после установки.

В моем решении VS я попытался создать папки x86/x64, установив для параметра «Копировать» значение «Всегда», но безрезультатно. Я также скопировал библиотеки DLL из моей локальной установочной папки в папку сервера, чтобы посмотреть, не испортится ли что-нибудь по пути.

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

Подводя итог, можно сказать, что проект создается специально для x64, имеет правильные библиотеки DLL в правильных папках и работает при локальной установке. Я в недоумении, почему он не будет работать при установке сервера. Я просмотрел бесчисленные потоки на StackOverflow, MSDN и веб-сайте SQLite, все они обычно предлагают папки x86/x64, но это не сработало для меня. Я надеюсь, что кто-то может помочь мне здесь.

Спасибо!


person Nicholas Drazenovic    schedule 20.03.2017    source источник


Ответы (1)


На самом деле смог понять это после небольшой отладки. Среда выполнения Visual C++, установленная на сервере, не соответствует версии. Я добавил модуль слияния в установщик версии, которую ожидал мой проект, переустановил приложение на сервере, и теперь оно прекрасно работает.

Для тех, у кого возникла эта проблема, найдите нужную версию среды выполнения VC++ в C:\Program Files(x86)\Common Files\Merge Modules. Если вы не знаете, какая версия вам нужна, используйте что-то вроде обходчика зависимостей на машине, которая выдает ошибку. Мой сказал мне, что мне не хватает VC140, поэтому этот модуль я скопировал в свой проект и добавил в установщик.

person Nicholas Drazenovic    schedule 21.03.2017