Проблема здесь не в dll .NET, а в неуправляемых dll.
Я пытался заставить работать два ASP.NET-приложения на одном сервере. Один из них старше, использующий ODP.NET 9.x, а новый - новейший ODP.NET. Я развернул новейшую версию ODP.NET с помощью xcopy и добавил пути к переменной среды PATH для новой ODP. Теперь старое приложение не работает (вероятно, пытается использовать новые библиотеки DLL). Когда я удаляю пути из переменной PATH, новое приложение не работает. Я нашел способ заставить его работать на одном сервере под IIS на страницах Oracle, но это не сработало. Возможно, потому что я не установил новейшую версию ODP.NET, а просто скопировал ее. Я должен буду попробовать это.
О чем говорит Oracle:
Ссылка: http://www.oracle.com/technology/tech/windows/odpnet/faq.html
Многие приложения Oracle работают на Microsoft Internet Information Services (IIS). Ранее IIS представлял собой приложение с одним процессом, без возможности назначать разные системные пути для каждого запущенного веб-приложения с использованием одного и того же экземпляра IIS. В IIS 6 в Windows Server 2003 IIS поддерживает несколько процессов для одного экземпляра. Поскольку каждое приложение имеет свой собственный процесс IIS, каждому веб-приложению может быть назначен отдельный каталог System Path со своим собственным Oracle Home.
В документации Microsoft содержится информация об изоляции рабочих процессов IIS и пулах приложений.
Чтобы настроить несколько активных Oracle Homes, работающих одновременно на одном сервере IIS:
1) Запустите IIS 6 в режиме изоляции рабочих процессов на Windows Server 2003
2) Разверните одну версию клиента Oracle в одном пуле приложений, а вторую - в другом пуле приложений. Например, вы можете использовать Oracle Client 9.2.0.2 и ODP.NET 9.2.0.2 в одном пуле приложений. И Oracle Client 9.2.0.4 и ODP.NET 9.2.0.4 могут использоваться другим пулом приложений. Вы не сможете использовать два активных Oracle Homes в одном пуле приложений. Каждый активный Oracle Home должен быть в другом пуле.
3) Установите каталог DLL для каждого рабочего процесса, чтобы использовать соответствующий каталог клиента Oracle Home. Для этого в каждом приложении ASP.NET вызовите SetDllDirectory (имя_каталога) в начале жизненного цикла приложения, прежде чем будут вызваны какие-либо библиотеки Oracle DLL. Входная переменная SetDllDirectory - это каталог домашней папки Oracle используемой версии ODP.NET. Примечание. SetDllDirectory - это неуправляемый вызов.