2010-04-19 6 views
1

.NET 3.5에서 .NET 4.0 프레임 워크로 업그레이드하는 응용 프로그램이 있습니다. 그것은 참조 된 COM 라이브러리를 사용합니다. 3.5에서는 아무런 문제가 없지만 4.0으로 변환 한 후 COM을 작동시키는 데 문제가 있습니다. COM은 타사 출신이므로 직접 개발하지 않았습니다..NET 3.5에서 4.0으로 응용 프로그램 업그레이드, COM이 지금 실패 함

는 나는 다음과 같은 COM 오류 (일반 COM 오류, COM 개체 자체에 특정되지 않음) 얻을

: 시간 = 0x8007000b

CLR이 날을 제공합니다 : '형식의 생성자의 호출을'Skype_Business_Launcher.Main '이 일치 지정된 바인딩 제약 조건이 예외를 던졌습니다. ' 행 번호 '3'및 행 위치 '5'.

그리고 C#을 로그 :

=== 사전 바인드 상태 정보 === LOG : 사용자 = \ 필립 LOG : 표시 이름 = Interop.SKYPE4COMLib, 버전 = 1.0.0.0, 중립 문화 = PublicKeyToken = null이 (완전 지정) LOG : Appbase = 파일 : /// 빈/디버그/ LOG : 초기 PrivatePath = NULL

호출 조립 : 스카이프 사업 실행기, 버전 = 1.0.5.0, 문화 = 중립 , PublicKeyToken = null.

LOG :이 바인딩은 기본로드 컨텍스트에서 시작됩니다. LOG : 응용 프로그램 구성 파일 사용 : LOG : 호스트 구성 파일 사용 : LOG : C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config의 컴퓨터 구성 파일 사용. LOG : 현재 정책이 참조에 적용되지 않습니다 (개인, 사용자 정의, 부분 또는 위치 기반 어셈블리 바인딩). LOG : 새 URL 파일 다운로드 시도 중 : ///bin/Debug/Interop.SKYPE4COMLib.DLL. ERR : 어셈블리 설치를 완료하지 못했습니다 (hr = 0x8007000b). 조사가 종료되었습니다.

보안상의 이유로 경로 이름을 제거했지만 모든 경로 정보를 확인했으며 모두 정확합니다. 또한 COM 라이브러리 파일은 해당 위치를 가리 킵니다. 또한 프로젝트 내의 OBJ 폴더에도 복사됩니다.

원래 임베디드 형식을 지원하지 않는 COM 라이브러리에 대한 오류가 발생하여 "Interop Types Embed"를 false로 설정했기 때문에 오류가 사라졌지 만이 오류가 연결된 경우 확실하지 않습니다. 그렇지 않으면 나는 그것을 단지 언급 할 것이라고 생각했다.

다시 말하지만, 3.5에서도 정상적으로 작동합니다.

감사합니다,

+0

어둠 속에서 촬영 : x64 버전의 프레임 워크를 사용하고있는 것처럼 보입니다. 이미 3.5의 경우인가요? 그리고 COM 서버 DLL 또는 EXE 있습니까? – Timores

+0

흠 .. 3.5가 32 비트인지 64 비트인지 확실하지 않습니다.실제로 나는 그들이 "Any CPU"로 설정했다고 생각합니다. 따라서 COM이 32 비트인지 만 궁금해집니다. 나는 내일 32 비트 모드를 강요하고 다시보고하려고 노력할 것이다. COM은 DLL입니다. EXE 항목이나 인터페이스가 없습니다. – Phillip

+0

COM이 DLL 인 경우 DLL과 프로그램 사이에 "비트"일치가 있어야합니다. – Timores

답변

3

어둠 속에서 촬영 : 당신이 프레임 워크의 x64 버전을 사용하는 것 같습니다. 이미 3.5의 경우인가요? 그리고 COM 서버 DLL 또는 EXE 있습니까?

COM 서버가 DLL이면 DLL과 프로그램 사이에 "비트"일치가 있어야합니다.

+0

예 대상 x64 및 x86에서 불일치가 있는지 확인하십시오. –

0

4.0으로 프로젝트를 변환하면 IDE에서 COM 라이브러리를 4.0으로 변환하는 데 문제가 발생할 수 있습니다.

프로젝트를 4.0으로 변환하면 com 라이브러리를 제거한 다음 다시 프로젝트에 포함 시키면 작동해야합니다.

관련 문제