오라클 11 (32 비트) 대 오라클 12 (64 비트)의 문제가 있습니다. 여기서 일부 플랫폼은 여전히 32 비트 창을 가지고 있으므로 32 비트 Oracle11을 사용하여 표준화했습니다. WinForms apps 및 Asp 사이트는 모든 플랫폼에서 32 비트 모드로 잘 작동합니다.IIS가 IIS-Express와 같은 버전의 Oracle을 사용하도록하는 방법
오직 내 dev 컴퓨터에만 Oracle 버전이 있습니다. VisualStudio 2015로 개발하고 IISExpress로 디버깅합니다. 그러나 개발 컴퓨터에서 IIS를 실행하면 64 비트 Oracle 12를 실행하고 예외를 throw합니다. Oracle.DataAccess.Client: the provider is not compatible with the version of Oracle Client.
오라클 12를 제거하는 것이 복잡해 보이므로 설치 디렉토리의 이름을 변경하여 사용을 중지했습니다. c:\oracle\product\12.1.0XXX
. 또한 레지스트리 키 HKLM/Software/Oracle
은 Oracle 12를 가리키며 Oracle-11 만있는 서버에는 존재하지 않으므로 제거했습니다.
또한 GAC에서 2.121.2.0 용 Oracle dll을 제거했습니다.
재부팅 후 VS2015와 IISExpress는 여전히 Oracle 코드에서 정상적으로 작동하지만 IIS를 사용하면 오류 : Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
이 표시됩니다. 이것은 IIS가 IISExpress가 아닌 다른 장소에서 Oracle DDL을 찾는 것을 보여줍니다.
Oracle11은 Oracle11 이전의 PATH 변수에 언급되어 있습니다. 내가 오늘날 PATH를 쉽게 바꿀 수있는 방법을 모르기 때문에, 예전에는 autoexec.bat에 설정되어 있었지만 Oracle12 경로의 이름을 변경하여 처리했다고 생각했습니다. 응용 프로그램은 PATH에 언급 된 모든 디렉토리를 검사하고 Oracle12 디렉토리가없는 경우 PATH에서 다음 디렉토리를 계속 찾습니다. 그러나 IIS가 명시 적으로 OraOps12.dll
을 찾으면 Oracle11을 사용하지 않습니다.
제 질문은 IIS에서 IISExpress와 같은 Oracle DLL을 사용하는 방법입니까?
Procmon을 사용하여 DLL을 찾을 수있는 모든 장소를 볼 수 있습니다. IIS의 DLL로드 전략을 모르지만 LoadLibrary 호출이 경로없이 수행하는 것으로 PATH를 기반으로하는 경우가 많습니다. 또한 레지스트리에 저장된 경로를 사용할 수도 있습니다 (PROCMON은 레지스트리 액세스도 표시합니다). –
@ LouFranco 업데이트 된 질문에서 PATH를 참조하십시오. – Roland
당신이 말한 것을 토대로, 저는 Oracle 12를 정말로 제거해야한다고 생각합니다. 내 추측은 레지스트리의 어떤 부분이 그것을 제어한다는 것입니다. –