programing

오라클.NetManagedDataAccess 오류: 'OracleInternal' 유형을 로드할 수 없습니다.어셈블리의 Common.ConfigBaseClass'

yellowcard 2023. 6. 9. 21:56
반응형

오라클.NetManagedDataAccess 오류: 'OracleInternal' 유형을 로드할 수 없습니다.어셈블리의 Common.ConfigBaseClass'

로컬, 개발 서버 및 프로덕션 서버에서 작동하는 프로젝트가 있습니다.

테스트 서버에서 실행하려고 하면 아래 오류가 발생하고, 화면을 멍하니 쳐다볼 수 없을 정도로 어떻게 해야 할지 모르겠습니다.힌트? 문제를 소스로 추적하는 프로세스?

Oracle 12.2용 NuGet 패키지 등을 설치했습니다.

'OracleInternal' 유형을 로드할 수 없습니다.'Oracle' 어셈블리의 Common.ConfigBaseClass'입니다.관리 데이터 액세스, 버전=4.121.2.0, Culture=중립, 공개 키토큰=89b483f429c47342'입니다.설명:현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다.오류에 대한 자세한 내용과 코드에서 발생한 오류에 대한 자세한 내용은 스택 추적을 검토하십시오.

예외 세부 정보:시스템.TypeLoadException:'OracleInternal' 유형을 로드할 수 없습니다.'Oracle' 어셈블리의 Common.ConfigBaseClass'입니다.관리 데이터 액세스, 버전=4.121.2.0, Culture=중립, 공개 키토큰=89b483f429c47342'입니다.

소스 오류:

현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다.예외의 출처 및 위치에 대한 정보는 아래의 예외 스택 추적을 사용하여 식별할 수 있습니다.

스택 추적:

[TypeLoadException: 유형을 할 수 .OracleInternal' 유형을 로드할 수 없습니다.어셈블리 의 Common입니다.Oracle의 어리의 Common.ConfigBaseClass'입니다.Managed .0, Culture=, PublicKey는 기본 설정, Culture=4.121.2.0, Culture=기능, =입니다.【=89b483f429c47342】
관리 액세스관리 데이터 액세스.엔티티 프레임워크입니다.엔티티 프레임워크 공급자 설정입니다.Oracle.ManagedDataAccess.엔티티 프레임워크입니다.EF 공급자 설정.IEFProviderSettings.get_TracingEnabled() +0 Oracle.관리 데이터 액세스.엔티티 프레임워크입니다.EF 공급자 설정.공급자 설정() +111 Oracle을 초기화합니다.관리 데이터 액세스.엔티티 프레임워크입니다.EForacleProviderServices..ctor() +629 Oracle.관리 데이터 액세스.엔티티 프레임워크입니다.EFracle +28ctor() +28

유형 초기화]: '입니다.Oracle'의 이니셜라이저입니다.관리 데이터 액세스.엔티티 프레임워크입니다.EFracle Provider Services의 파일은 다음과 같습니다.]
관리 액세스관리 데이터 액세스.엔티티 프레임워크입니다.EFracleProviderServices.get_Instance() +24

웹.구성에는 다음 블록이 있습니다.

  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>

그리고.

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="PVMDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=pdxcludds108.pacificorp.us)(PORT=11086))(CONNECT_DATA=(SERVICE_NAME=DDS1086.PACIFICORP.US))) " />
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=USERID;Password=WORKINGPASSWORD;Data Source=PVMDataSource" />
    <add name="PVMEntities" connectionString="metadata=res://*/Models.PVMModel.csdl|res://*/Models.PVMModel.ssdl|res://*/Models.PVMModel.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string=&quot;DATA SOURCE=pdxcludds108.pacificorp.us:11086/DDS1086.PACIFICORP.US;PASSWORD=XXXXXXX;PERSIST SECURITY INFO=True;USER ID=XXX&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

참고: 이 서버에서 작업 중인 다른 프로젝트가 있습니다. 다른 버전의 Oracle 클라이언트를 에 사용하고 있을 뿐입니다.넷. 다른 어떤 것도 관리되는 드라이버만 사용하지 않습니다.저는 이 오류를 파헤칠 방법을 찾고 있습니다. 해당 유형의 출처와 로드 위치에 대한 힌트입니다.

사이에 갈등이 있습니다.Oracle.ManagedDataAccess서버에 설치되고 GAC에 등록된 NuGet 및 서버에 설치된(Oracle 클라이언트 설치를 통해) 서버에서 사용할 수 있습니다.

취소 소취Oracle.ManagedDataAccessGAC에서 명령행을 실행하고 디렉토리로 이동합니다.

{Oracle home}\product\{version}\client_64\ODP.NET\managed\x64

거기서 찾아야 합니다.OraProvCfg.exe다음 명령을 실행하여 등록을 취소합니다.Oracle.ManagedDataAccessGAC 파일:

OraProvCfg /action:ungac /providerPath:Oracle.ManagedDataAccess 

오라클을 제거해야 합니다.GAC(C:\Windows\Microsoft)의 관리되는 데이터 액세스 어셈블리입니다.NET\assembly...)

도구 gacutil어셈블리를 탈거하는 방법:

C:\Program Files(x86)\Microsoft SDKs\Windows\YOUR_VERSION\bin\NETFX 4.6.1 Tools> gacutil /u Oracle.관리되는 데이터 액세스

프로젝트의 참조를 오라클로 대체하여 수정할 수 있었습니다.관리 데이터 액세스 및 오라클.관리 데이터 액세스.엔티티 패키지 관리자가 설치한 개체에서 오라클 클라이언트 설치 관리자가 설치한 개체로 구성됩니다.버전은 동일하지만 해당 DLL에서 빌드 번호가 다릅니다.

다른 사람들이 말했듯이 Oracle을 제거해야 합니다.GAC에서 관리되는 데이터 액세스.

나는 달립니다{Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x64\unconfigure.bat그리고.{Oracle home}\product\12.1.0\dbhome_1\ODP.NET\managed\x836\unconfigure.bat그리고 그것은 성공하였다.

위의 딜런과 똑같은 문제가 있었습니다.이 문제는 특정 Oracle 버전(4.121.2.0)과 관련된 것으로 나타납니다.

솔루션은 간단했습니다. Nuget에 들어가서 Oracle용 Nuget 패키지의 다음 버전으로 이동하기만 하면 됩니다.관리 데이터 액세스.클라이언트, 4.122.1.0.

일단 GAC Oracle이 설치되어 있거나 설치되어 있지 않은 Oracle 클라이언트 또는 클라이언트가 없는 환경이나 서버를 혼합하고, GAC를 여전히 사용하는 오래된 애플리케이션을 유지하며, Nuget 패키지를 사용하는 새 프로젝트를 추가할 수 있습니다.많은 레거시 종속성이 있는 환경에서 서버의 GAC에서 Oracle dll을 제거하는 것과 같은 레거시 항목을 제거하도록 요청하는 것은 이러한 블로그에서 항상 좋지 않은 생각입니다.

GAC에서 DLL을 제거하는 것이 옵션이 아닌 경우에는 다음 버전의 oracle.managedData.access 12.2.1을 가져와 서버의 bin 디렉토리에 저장합니다.나중에 assemblyBinding을 web.config 파일에 추가해야 합니다.

이렇게 하면 런타임 중에 오류가 발생하는 GAC에서 12.1.2 버전을 풀링할 수 있습니다.새 버전을 기준으로 앱을 다시 컴파일할 필요가 없습니다.

      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-12.1.2.0" newVersion="12.2.1.0" />
      </dependentAssembly>

이 문제에는 분명히 이상한 점이 있습니다.나는 내 로컬 서버에서 앱을 개발하고 있었는데, 앱을 우리 서버에 업로드했을 때 이 오류가 발생했습니다.서버에 Oracle 클라이언트가 설치되어 있습니다.이 스레드를 보고 2개의 DLL을 복사했습니다(Oracle.ManagedDataAccess.dll&Oracle.ManagedDataAccess.EntityFramework.dll)는 오라클 클라이언트 내에서 내 앱 bin 디렉터리의 버전을 대체했습니다.그것이 문제를 해결했습니다.

내 시나리오에서는 클래스 라이브러리 데이터베이스 유틸리티를 사용하는 콘솔 응용 프로그램이 있습니다.저는 오라클을 참조해야 했습니다.또한 콘솔 응용 프로그램에서 관리되는 데이터 액세스를 사용하여 런타임에 DLL을 찾을 수 있습니다.이게 최선의 방법인지는 모르겠지만, 저한테는 효과가 있었습니다.

좋은 오후예요.

이 오류를 어떻게 해결했는지 공유하고자 합니다.

  1. Visual Studio 2019 cmd를 관리자로 시작했습니다.

  2. cmd: gacutil -u Oracle에서 다음 명령줄을 실행했습니다.관리되는 데이터 액세스

기본적으로 이 명령줄은 GAC(Global Assembly Cache)에서 Oracle 참조를 제거합니다. 이렇게 하면 프로젝트(너겟이 설치됨)에 있는 패키지에서만 참조를 가져올 수 있고 Oracle 클라이언트에서는 가져오지 않습니다.

오라클 클라이언트 드라이버를 설치해야 합니다..NET 패키지에는 이러한 패키지가 포함되어 있지 않습니다. 관리되는 월드에서 관리되지 않는 월드로 변환할 수 있습니다.드라이버가 관리되지 않는 월드에 있으므로 올바르게 설치해야 합니다.

언급URL : https://stackoverflow.com/questions/30407213/oracle-net-manageddataaccess-error-could-not-load-type-oracleinternal-common

반응형