Oracle용 파일 또는 어셈블리를 로드할 수 없습니다..NET의 데이터 액세스
Oracle에 액세스하기 위해 간단한 프로그램을 실행하려고 하면 다음 메시지가 표시됩니다.
파일 또는 어셈블리 'Oracle'을 로드할 수 없습니다.데이터 액세스, 버전=2.111.7.20, Culture=중립, 공개 키Token=89b483f429c47342' 또는 해당 종속성 중 하나입니다.지정한 파일을 찾을 수 없습니다.
GACwindows\assembly는 GAC에 .gacutil -l
수 . (.GAC 파일 이름)gacutil -i [path]
알 수 없는 오류가 발생합니다.
같은 경험을 한 사람이 있습니까?
Windows Server 2008 R2(64비트 운영 체제)에서 방금 겪은 일에 대한 답변을 드리겠습니다.제가 받은 라이브러리의 애플리케이션 제품군은 이전 DLL 라이브러리와 함께 .net 3.5 x86을 사용하여 개발되었으며 오라클에서 최신 x64 클라이언트를 설치했기 때문에 꼼짝할 수 없었습니다.
제가 발견한 것은 다음과 같습니다.윈도우즈 서버 2008용 Oracle에서 최신 x64 클라이언트를 설치합니다.이것이 2.7.0 클라이언트일 것이라고 생각합니다.설치를 선택할 때 사용자 정의를 수행하고 .NET 라이브러리를 선택합니다.tnsnames 파일을 구성하고 데이터 소스에 대해 tnsping을 테스트합니다.
다음으로 32비트 응용 프로그램을 실행하는 경우 32비트용으로 동일한 버전의 클라이언트를 설치합니다.또한 동일한 설치 루틴을 따르고 동일한 홈을 선택합니다.
작업을 마치면 두 개의 클라이언트 디렉토리(클라이언트1 및 클라이언트2)가 있는 단일 앱/제품을 사용할 수 있습니다.
창/어셈블리 디렉토리로 이동하면 Oracle에 대한 참조가 있음을 알 수 있습니다.DataAccess.dll(x2)(x86용 하나 및 AMD64용 하나)
이제 개발자가 있는지 또는 직접 기계에서 개발 중인지에 따라 여기서는 문제가 없을 수 있지만, 이전 드라이버를 사용하는 경우 마지막 단계를 수행해야 합니다.
app\name\product\version\client_1\odp.net \filename 정책\2.x 디렉토리로 이동합니다.여기에는 두 개의 정책 파일이 포함되어 있습니다.gacutil /i를 사용하여 Policy.2.111을 설치합니다.Oracle.DataAccess.dll을 GAC에 저장합니다.기존 Oracle ODP 호출을 최신 버전으로 리디렉션합니다.그래서, 만약 누군가가 10g 클라이언트로 개발했다면, 그것은 이제 11개의 클라이언트와 함께 작동할 것입니다.
참고로 -- 일부는 2.111.7.20으로 최신 ODP.NET을 설치할 수 있습니다.메인 오라클 클라이언트 자체는 2.111.7.0과 함께 제공됩니다.7.20은 성공하지 못했지만 7.0 클라이언트에는 문제가 없습니다.
x64로 컴파일하고 있었는데 x86을 사용하면 문제가 해결됩니다.
솔루션은 매우 간단합니다. 이는 시각적 스튜디오 프로젝트와 관련하여 서버/워크스테이션에서 사물을 어떻게 정의하느냐에 달려 있습니다.
먼저 2.111.7.20의 경우 사용 중인 Oracle 라이브러리의 버전을 확인합니다. 다음으로 Windows 홈-> 어셈블리 폴더에 있는 Windows GAC로 이동합니다.
아래로 스크롤하여 Oracle dll(일반적으로 Oracle이라고 함)로 이동합니다.데이터 액세스 또는 오라클.웹. 올바른 버전을 찾아 x86 또는 AMD64로 표시되어 있는지 메모합니다.
Visual Studio에서 대상 플랫폼이 GAC의 dll과 동일한지 확인하여 GAC 폴더에 x86으로 표시되면 대상 플랫폼이 x64이고 다른 x64인지 확인합니다.Visual Studio 프로젝트 속성의 빌드/플랫폼 대상에서 이 값을 설정할 수 있습니다.
또한 프로젝트의 참조 아래에 있는 참조가 개발 컴퓨터의 동일한 버전을 가리키는지 확인하십시오.
이것으로 모든 것이 잘 될 것입니다.
일반적으로 기업 환경에서 로컬 종속성의 버전을 변경하는 것이 더 쉽기 때문에 서버를 먼저 확인한 다음 서버 관리자에게 다른 dll을 설치하도록 요청합니다.
저도 같은 문제가 있었습니다.
솔루션은 현재 솔루션의 플랫폼을 x64로 변경하는 것이었습니다.
Visual Studio에서 솔루션 > 구성 관리자 > Active Solution Platform을 마우스 오른쪽 버튼으로 클릭합니다.
첫 번째 답변에서 언급한 바와 같이 개발자에게 빌드 및 런타임 함정을 초래하는 32/64비트 시나리오가 있습니다.
해결책은 항상 올바른 방법을 찾는 것입니다.설치한 소프트웨어 및 OS 유형.
오라클 드라이버 및 솔루션에 대한 몇 가지 시나리오 목록을 보려면 이 게시물을 방문하십시오.
.net 프로젝트에서 참조 섹션으로 이동하고 Oracle을 마우스 오른쪽 버튼으로 클릭합니다.데이터 액세스 DLL, 속성으로 이동합니다.
을 "설을로"로합니다.Specific Version=False
이제 버전 충돌이 없습니다.
저의 경우, 오류는 어셈블리가
Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342
누락되었습니다.
실행할 때gacutil.exe /l 'Oracle.DataAccess'
결과:
The Global Assembly Cache contains the following assemblies:
Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Number of items = 1
지금 막 Oracle 클라이언트를 설치했습니다.win32_11gR2_client
그런 다음 오라클 개발자 도구를 설치했습니다.ODTwithODAC112030_deleloper_tool
지금이다gacutil
다음과 같이 말합니다.
The Global Assembly Cache contains the following assemblies:
Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Number of items = 2
고정, 하나의 어셈블리 케이스가 완전히 누락됨
다음을 시도합니다.Visual Studio에서 도구/옵션...으로 이동합니다.프로젝트 및 솔루션...웹 프로젝트...64비트 버전의 IIS Express 확인란이 선택되어 있는지 확인합니다.
Oracle에서 관리되는 ODP.NET 어셈블리로 전환했습니다.또한 이전 어셈블리를 사용하는 IIS 웹 앱에서 모든 파일을 제거해야 했습니다.이제 IIS Express와 IIS에서 디버깅할 때 32비트 버전과 64비트 버전 간에 충돌이 발생하지 않습니다.다음 문서를 참조하십시오.
저는 며칠 동안 같은 문제에 직면해 있다가 Oracle을 알게 되었습니다.프로젝트의 참조 목록에서 DataAccess를 사용할 수 있지만 bin 폴더가 없습니다.그래서 저는 그것을 참조 목록에서 제거하고 다시 추가했습니다.
오라클을 등록하십시오.GAC에 대한 데이터 액세스
raProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll
OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll
당신은 이것을 따를 수 있습니다.
https://docs.oracle.com/health-sciences/inform-62/install/index.htm?toc.htm?214691.htm
Oracle을 등록합니다.DataAccess.dll 어셈블리 오라클을 등록해야 합니다..NET 버전 2 및 버전 4의 GAC(Global Assembly Cache)에 대한 DataAccess.dll 어셈블리:
관리자로 명령 프롬프트를 엽니다.
%ORACLE_CLIENT_HOME%\ODP.NET\bin\2.x로 이동합니다.
다음 명령을 실행합니다.
oraprovcfg.exe/action:gac/providerpath:Oracle.DataAccess.dll
%ORACLE_CLIENT_HOME%\ODP.NET\bin\4.x로 이동합니다.
다음 명령을 실행합니다.
oraprovcfg.exe/action:gac/providerpath:Oracle.DataAccess.dll
저의 경우, 이 "32비트 선호" 상자가 선택되어 있기 때문입니다.
언급URL : https://stackoverflow.com/questions/1953676/could-not-load-file-or-assembly-for-oracle-dataaccess-in-net
'programing' 카테고리의 다른 글
vuex 함수 - 개체 값을 기준으로 true 또는 false를 반환합니다. (0) | 2023.06.27 |
---|---|
NumPy 배열에서 가장 빈도가 높은 숫자 찾기 (0) | 2023.06.27 |
홈브루로 이미지 매직을 설치하려면 어떻게 해야 합니까? (0) | 2023.06.22 |
'AppModule' 모듈에서 선언한 예기치 않은 값 'AnyComponent' (0) | 2023.06.22 |
mongoimport를 사용하여 1개 이상의 json 파일 가져오기 (0) | 2023.06.22 |