Как заставить веб-приложение ASP.NET использовать библиотеки DLL Oracle в папке BIN?

Итак, у меня есть веб-приложение, которому нужен клиент Oracle 19c (4.122.19.1) из-за определенных изменений синтаксиса, в то время как наш сервер Dev IIS имеет более старый клиент 4.121.2.0.

В любом случае, я поместил все, что я слышал, как надлежащие библиотеки dll поддержки в каталог Bin приложения, которые, согласно всем моим исследованиям, следующие: oci.dll ociw32.dll Oracle.ManagedDataAccess.dll Oracle.Web.dll orannzsbb19 .dll oraocci19.dll oraocci19d.dll oraociei19.dll oraons.dll OraOps19.dll

Это отлично работает с моего ПК в Visual Studio. Когда я развертываю сервер Dev IIS (с пулом приложений, работающим в режиме «Включить 32-разрядную версию», поскольку на моем ПК работает IISExpress в 32-разрядной версии), возникают различные ошибки подключения к Oracle.

Теперь в Process Explorer на своем ПК я смотрю на IISExpress и вижу, что он загружает все вышеперечисленные библиотеки DLL, хотя и из GAC, потому что этот клиент установлен локально. Тем не менее, на сервере Dev, Process Explorer, в моем процессе W3WP.exe я вижу только Oracle.ManagedDataAccess.dll и Oracle.Web.dll, но не поддерживающие библиотеки DLL. Я совершенно уверен, что проблема в том, что они отсутствуют, особенно OraOps19.dll.

Я использовал вещь DLLPath в web.config, это не имеет значения. Мне всегда говорили, что Asp.Net всегда сначала пытается загрузиться из BIN. Тем не менее, здесь я считаю, что это, по крайней мере, частично игнорируется - как на моем ПК, который идет прямо к GAC, так и с сервера Dev IIS, который получает надлежащие .Web и .ManagedDataAccess из Bin, но больше ничего.

Как я могу заставить это забыть о Gac и заставить его найти все, что ему нужно, с точки зрения Oracle, в корзине? Спасибо


person jimo3    schedule 27.08.2020    source источник
comment
В Visual Studio, когда вы щелкаете правой кнопкой мыши DLL в разделе «Ссылки», каково значение «Копировать локально»? Кроме того, у вас есть возможность установить для конкретной версии значение True, а затем установить именно ту версию, которая вам нужна. Может стоит попробовать..   -  person Bruno Farias    schedule 27.08.2020


Ответы (1)


DLL прослушиваются; не разрешается выпускать критические изменения для таких подписанных dll. Обходной путь:

Предполагая, что это 100% код il (без участия C++/clr)

  1. ildasm dll оракула в файлы .il и .res
  2. Удалить все ссылки на открытый ключ
  3. ilasm файлы .il и .res обратно в dll
  4. свяжите свое приложение с этими DLL

Теперь он больше не смотрит в GAC.

person Joshua    schedule 27.08.2020
comment
Спасибо, я так далеко в червоточине с этим сейчас. Ilasm отлично работал с файлами Oracle.web.dll .res и .IL, но не работал с файлами Oracle.ManagedDataAccess.dll. Я не могу идти дальше этой пропасти. Я думаю (честно говоря), что опередил бы время, если бы перенес базу данных на Sql-Server. У меня никогда не было проблем с проектами .Net при использовании Sql-сервера. Я не знаю, почему Oracle должен быть таким неприлично сложным. Что ж, я знаю почему - консультантам Oracle нужно платить. - person jimo3; 28.08.2020
comment
@jimo3: Это явная ошибка оракула. Однако самый быстрый путь — отправить целую виртуальную машину. - person Joshua; 28.08.2020