2009-12-03 5 views
1

끔찍한 제목에 대해 사과드립니다.COM DLL을 참조하는 서명 된 어셈블리 종속성은 종속성의 생성 된 interop 어셈블리를 참조해야합니다.

다른 어셈블리의 종속성 인 Signed.dll 'Signed.dll'이 있습니다 (예 : Executable.exe).

Signed.dll은 COM DLL을 참조하고이 COM DLL 유형 중 하나를 공개적으로 노출합니다. 'ComPublicT.'

Executable.exe는 원래 COM DLL에 대한 참조를 추가하는 대신 Signed 프로젝트에서 자동 생성 된 Interop.COM.dll을 참조해야합니다.

이 오류는 두 개의 서로 다른 COM interop 어셈블리의 서로 다른 두 가지 ComPublicT 형식 간의 형식 불일치입니다.

Signed.dll에 서명 된 경우에만 필요합니다.

ComPublicT를 모방 한 형식을 만드는 것 외에 Executable이 COM DLL을 COM DLL 대신 참조 할 수있게하려면 어떻게해야합니까?

왜 이런 일이 발생합니까?

편집, 여기에 약간 다른 고장입니다 : 프로젝트 서명

이 COM.dll를 참조하고, 공개적으로 Interop.COM.dll

이 Visual Studio에서 참조 자동으로 생성을 추가하기 COM.dll 에서 유형을 노출

실행 가능한 참조 및 서명 된 프로젝트에 따라 달라집니다. 일반적으로 COM.dll에 대한 참조를 추가 할 수 있으며 모두 정상입니다. 서명 서명 때문에, 서명에서 공개적으로 노출 Interop.COM.dll 유형이 실행 파일의 Interop.COM.dll

실행에서 공개적으로 노출 유형과 동일하게 컴파일러에 의해 볼 수 없습니다

수동의 서명 참조해야합니다 깨지기 쉬운 Interop.COM.dll.

+0

Signed.dll에서 사용하는 interop을 어떻게 생성합니까? Signed.dll은 잘 서명되었으므로 .snk 키 파일을 제공 할 수 있도록 수동으로 작성해야합니다. –

+0

Visual Studio에서 COM 참조를 프로젝트에 추가하면 COM interop 어셈블리가 자동으로 생성됩니다. COM.dll은 Interop.COM을 생성합니다.dll과 obj 및 bin 폴더에 배치됩니다. –

+1

문제는 생성 된 Interop 어셈블리가 서명되지 않은 것입니다. – NPehrsson

답변

0
  1. 서명 된 어셈블리에서 참조하는 모든 어셈블리에도 서명해야합니다.

  2. 일반적으로 COM DLL 작성자가 제공 한 서명 된 PIA (Primary Interop Assembly)가 있습니다. 모든 .NET 어셈블리에서 참조하는 상위 COM 유형에 대한 유일한 interop 어셈블리 여야합니다. http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 내 경우에는 PIA를 사용할 수 없습니다.

내 두 프로젝트에 대해 Visual Studio에서 생성 한 두 개의 interop 어셈블리는 하나의 interop 어셈블리가 서명되고 다른 어셈블리가 서명되지 않는다는 점에서 다릅니다.

따라서 interop 어셈블리에 포함 된 형식이 다릅니다.

한 가지 해결책은 두 프로젝트에서 참조하는 단일 서명 된 interop 어셈블리를 생성하는 것입니다.