Фон
Веб-приложение на C # / .NET, которое обращается к базе данных Informix.
Клиентский SDK установлен локально.
Проект ссылается на IBM.Data.Informix.dll в каталоге IBM SDK
Я использую более старую DLL, потому что база данных Informix, к которой мы имеем доступ, является древней (версия 7. что-то)
Он отлично работает на моей машине (Windows 10) при работе в режиме отладки через Visual Studio.
Отлично, я разверну его на тестовом сервере (Windows Server 2012 R2).
Первая попытка
- Простое развертывание файлов из Visual Studio
- Запустите приложение для доступа к базе данных
- Ошибка
Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
The system cannot find the file specified.
Вторая попытка
- Скопировал dll в папку проекта с именем lib
- Изменена ссылка на проект для этой библиотеки
- Развернутые
- Та же ошибка, что и при первой попытке
Хорошо, я бы лучше это изучил. См. Ниже ссылки.
Третья попытка
- Удалена ссылка на SDK DLL
- Установлено из NuGet - версия Avatar Solucoes
- Развернутые
- Та же ошибка, что и при первой попытке
Дополнительные исследования
Четвертая попытка
- Скопировал файлы gacutil на сервер и установил dll с третьей попытки в GAC
- Развернутые
- Новая ошибка
The type initializer for 'IBM.Data.Informix.IfxConnection' threw an exception.
Unable to load DLL 'iclit09b.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Больше исследований
Пятая попытка
- Неустановленный пакет NuGet
- Ссылочная DLL из SDK
- Добавлен SDK .dll в gac на сервере
- Обновленное приложение
- Та же ошибка, что и при первой попытке
Больше исследований
Шестая попытка
- Установлен из NuGet - снова версия Avatar Solucoes
- добавил ту же самую DLL в gac на сервере
- создал новую папку C: \ informix на сервере
- скопировал iclit09b.dll из ibm sdk в эту папку
- добавлена папка в PATH
- Перезапущенный IIS
- Развернутые
- Ошибка такая же, как и в четвертой попытке
Больше исследований
Седьмая попытка
- Скопировал iclit09b.dll в развернутую папку bin.
- Развернутые
- Ошибка такая же, как и в четвертой попытке
Больше исследований
Нашел этот зловещий абзац
https://www.ibm.com/developerworks/data/library/techarticle/dm-0510durity/index.html
Важное замечание: Драйвер IBM Informix ADO.Net не является автономным в файле IBM.Data.Informix.dll, который устанавливается в каталог / bin вашей установки. Очевидно, он использует другой код клиента, установленный в SDK. Это означает, что вы должны установить Informix Client SDK на любые машины, которые будут использовать драйвер ADO.Net. Вы не можете просто включить IBM.Data.Informix.dll в свой дистрибутив. Это может быть серьезным ограничением для некоторых приложений. Вам также необходимо выполнить настройку SDK (SetNet32), чтобы определить источники данных Informix.
Нужно ли нам устанавливать SDK на производственных серверах? И нужно ли устанавливать библиотеки DLL в GAC?
Если да, то как люди могут развертываться на серверах, которые они не контролируют?
Как вы, вероятно, можете сказать, у меня нет большого опыта работы с Informix и .NET.
Я буквально понятия не имею, что делать дальше.
Любые предложения будут приняты с благодарностью.
Ссылки в произвольном порядке
Обновление 2019-01-25
Исходя из ответа @ Satyan, я удалил все предыдущие версии SDK и очистил GAC
Восьмая попытка
- Я установил последнюю версию SDK
- Я ссылался на версию IBM.Data.Informix.dll для net40
- Я добавил эту версию в GAC
- На локальной машине я получил ту же ошибку, что и первая попытка
Девятая попытка
- Я ссылался на версию IBM.Data.Informix.dll для net20
- Я добавил эту версию в GAC
- На локальной машине я получил ту же ошибку, что и первая попытка
Десятая попытка
К счастью, у меня все еще была копия более старой IBM.Data.Informix.dll
- Я ссылался на более старую версию IBM.Data.Informix.dll
- Я добавил эту версию в GAC
- На моем локальном компьютере я могу снова запустить программу успешно. Уф!
- Я развернул на сервере
- Получите ту же ошибку, что и четвертая попытка
Больше исследований
Нашел эти статьи
, что предполагает разрешение
Установите INFORMIXDIR и PATH в качестве системных переменных среды, а затем сбросьте сервер Microsoft Internet Information Server или весь компьютер и попробуйте снова запустить приложение ASP.
Одиннадцатая попытка
- Добавлена новая системная переменная среды INFORMIXDIR
- Перезапущенный IIS
- Попробуйте приложение
- Неа. По-прежнему получаю ту же ошибку, что и четвертая попытка.
В своем исследовании я обнаружил ссылку на «Informix Connect», который предположительно используется для установки клиентских продуктов.
и в файле client_install.pdf в загрузке SDK он ссылается на installconnect.exe, но этот exe-файл не существует в загруженном мной SDK.
Если это отдельная загрузка в SDK, я не могу ее найти.
Обновление 2019-02-08
Решили иметь еще одну трещину в этом
Двенадцатая попытка
- Добавлен каталог informix ближе к началу пути среды
- Перезапущенный IIS
- Новая ошибка
SQL0035N The file "en_us\IBM.Data.Informix.xml" cannot be opened.
at IBM.Data.Utilities.IfxResource..ctor(CultureInfo cultureInfo, String dirName, String fileName, String szMsgPath, String xpath)
at IBM.Data.Utilities.IfxResources.GetResource(CultureInfo cultureInfo, String xpath)
at IBM.Data.Informix.IfxException.get_Message()
Aha! Новая ошибка, я где-то получаю.
Тринадцатая попытка
- Скопированная папка C: \ Program Files \ Informix Client-SDK 4.10.FC9 \ msg в папку INFORMIX на сервере
- Добавлен IIS_IUSRS в папку informix
- Перезапущенный IIS
- Та же ошибка, что и в двенадцатой попытке
Я также попытался скопировать только папку en_us в папку informix - нет!
Больше ссылок
Обновление 2019-02-14
Четырнадцатая попытка
ХОРОШО. Я решил рискнуть и установить SDK на сервер.
Чего я не ожидал, так это установки, перезапускающей сервер без первого запроса.
Во всяком случае, когда он вернулся, мы вернулись к первоначальной ошибке
Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
The system cannot find the file specified.
OK. Это не сработало. Это также как-то испортило установку TFS, к которой больше нельзя было получить доступ через браузер.
ОК, я удалю SDK. Нету. Функция удаления завершилась с ошибкой переполнения стека Java. К счастью, сервер является виртуальным, поэтому я восстановил резервную копию прошлой ночью. Все снова хорошо.