2012-05-18 1 views
11

나는 최근에 내가 어떤 플랫폼을 대상으로하고 게시 할이 프로젝트를 설정는 C#에서 ODP.NET (Oracle.DataAccess 4.112.3)를 사용 (4.0) 응용 프로그램C#의 ODP.NET로드 파일 또는 어셈블리

을 테스트 시작 앱. 내가 클라이언트 컴퓨터에 프로그램을 실행하면

나는 나타납니다

Could not load file or assembly 'Oracle.DataAccess, Version=4.112.3.0,Culture=neutral, 
PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load 
a program with an incorrect format. 

는 마찬가지로 나는 '모든 CPU'를 목표로했고 나는 또한 응용 프로그램과 함께 Oracle.DataAccess 어셈블리를 내장 한 고 말했다.
Oracle 클라이언트가 설치되어 있지 않은 시스템과 설치되지 않은 시스템에서이 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

+0

매력처럼 작동합니다 Oracle 참조의 속성에서 '로컬 복사'를 True로 변경 했습니까? – carny666

답변

18

는 마찬가지로 나는이 가능성이 문제는 '어떤 CPU를'

대상으로 한 고 말했다.

Oracle.DataAccess에는 32bit64bit 시스템에 대한 별도 버전이 있습니다. 32 비트 시스템에서 개발하고 64 비트 OS에서 전개하는 경우이 메시지가 나타납니다.

x86을 대상으로 응용 프로그램을 빌드하고 데이터 액세스 구성 요소의 32 비트 버전을 배포하면이 문제를 쉽게 해결할 수 있습니다.

+0

그게 바로 도움이되었습니다. – Wjdavis5

+1

웹 응용 프로그램의 경우 이는 응용 프로그램 풀이 32 비트를 실행해야하며 32 비트 Oracle 클라이언트가 필요하다는 것을 의미합니다. '4.112.3'을 사용할 때 64 비트 웹 서버 및 오라클 클라이언트의 솔루션은 무엇입니까? 로컬 복사는 32 비트입니다. 팔. 그것이 없으면, 클라이언트의 GAC 사본'4.112.2'가 사용됩니다. 팔. 64 비트 새 버전을 bin으로 복사하면 공급자 팩토리에 인터페이스가 누락되었다는 메시지가 나타납니다. 이전 GAC_64 버전을 다시 사용하려고합니까? 아니면'web.config'에서'bin' 복사본에 새 공급자를 사용하도록 알려주고 싶지 않은 것이 있습니까? –

+0

고마워요,이게 내 문제를 해결했습니다. :) – Pirate

0

Oracle.DataAccess 어셈블리가 시스템에 종속되어 있고 클라이언트 시스템에 누락되어 있는지 확인해야합니다.

4

Reed Copsey가 말했듯이 두 가지 다른 DLL이 있습니다. ANYCpu를 타겟팅하면 앱이 64 비트 컴퓨터에서 64 비트, 32 비트 컴퓨터에서 32 비트로 실행됩니다. 따라서 AnyCPU 모드로 실행되는 32 비트 또는 64 비트 에서 응용 프로그램을 작동 시키려면 Oracle.DataAccess의 참조를 Specific Version = false로 변경하고 copy local = false로 변경해야합니다. 클라이언트에 배포 할 때 에 GAC의 oracle dll이 있어야하며 자동으로 올바른 버전을 선택해야합니다. 상단 변화 X64을 디버깅 할 수있는 수신 선택에서 모든 CPU를 디버깅에서

0

, X64에 내부적으로 모든 CPU 포인트는하지만이 작동하지 않습니다하지만, 64로 변경을 시도하고 당신은했습니다

관련 문제