2010-03-15 7 views
16

VS2010RC C# 솔루션에 VC6 COM DLL을 추가하려고합니다. DLL은 VC6 도구로 컴파일되어 x86 버전을 만들었으며 VC7 크로스 플랫폼 도구로 컴파일되어 VC7 DLL을 생성했습니다.Visual Studio 2010 64 비트 COM Interop 문제

소비하는 C# 프로젝트의 플랫폼이 x86으로 설정된 경우 x86 버전의 어셈블리가 제대로 작동합니다. x64 또는 x 86 버전의 DLL이 실제로 등록되었는지는 중요하지 않습니다. 둘 다 작동합니다. 플랫폼이 '모든 CPU'로 설정되어있는 경우 Interop.<name>.dll로드시 BadImageFormatException이 표시됩니다.

x64 버전의 경우 프로젝트를 빌드 할 수 없습니다. tlbimp 오류가 발생합니다.

TlbImp : error TI0000: A single valid machine type compatible with the input type library must be specified.

이 문제를 본 사람이 있습니까?

편집 : 나는이 문제에 파고 많은 더 많은 작업을 수행하고이 비주얼 스튜디오 버그가있을 수 있습니다 생각했습니다

. 나는 깨끗한 해결책을 가지고있다. 나는 언어에 상관없이 'Any CPU'를 선택하여 COM 어셈블리를 가져 왔습니다. 결과 Interop DLL의 프로세스 아키텍처는 MSIL이 아니라 x86입니다.

지금이 기능을 사용하려면 Interop을 손으로 만들어야 할 수도 있습니다.

다른 제안이 있으면 알려주세요.

답변

47

이 문제는 CSProj 파일을 열고의에 다음 노드를 추가하여 해결할 수 있습니다 | 노드이 누락 된 '(구성) 모든 CPU':이 노드가없는 경우

<PlatformTarget>AnyCPU</PlatformTarget> 

을 TlbImp는 기본적으로 x86으로 설정되며 문제가 발생합니다.

+0

나는 이것을 몇 번 더 투표 할 수 있으면 좋겠다. 돌이켜 보면서 오류가 의미하는 것이 명백하지만 언뜻보기에는 당황 스럽습니다. – xcud

+0

하지만이 설정을 사용하여 VS를 실제로 시작하려면 CS 프로필 파일에 항목을 추가해야했습니다. – Roboblob

관련 문제