com dll을 참조하는 서명 된 어셈블리 종속성의 종속성의 생성 된 인터 로프 어셈블리가 참조해야합니다.

StackOverflow https://stackoverflow.com/questions/1843529

문제

끔찍한 제목에 대해 죄송합니다.

다른 어셈블리의 종속성 인 Seigned Assembly 'Signed.dll'이 있습니다.

signed.dll을 참조 하고이 com dll의 유형 중 하나 인 'compublict'중 하나를 공개적으로 노출시킵니다.

executable.exe는 원래 com dll에 대한 참조를 추가하지 않고 서명 된 프로젝트에서 자동 생성 된 interop.com.dll을 참조해야합니다.

오류는 두 개의 다른 COM 인터 로프 어셈블리의 두 가지 다른 공개 유형 간의 유형 불일치입니다.

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

Compublic을 모방하는 유형을 만드는 것 외에, 실행 파일은 서명의 COM 인터 로프 어셈블리 대신 COM DLL을 참조 할 수 있도록하는 방법은 무엇입니까?

왜 이런 일이 발생합니까?

편집, 여기에 다소 다른 분석이 있습니다.

서명 된 프로젝트 참조 com.dll 및 com.dll에서 유형을 공개적으로 노출시켜 Visual Studio 에서이 참조를 추가하여 interop.com.dll을 자동으로 생성합니다.

실행 가능한 참조 및 서명 된 프로젝트에 따라 일반적으로 com.dll에 대한 참조를 추가 할 수 있으며 모든 것이 좋습니다.

서명이 서명되었으므로 서명 된 공개적으로 노출 된 interop.com.dll 유형은 컴파일러에서 Executable 's Interop.com.dll의 공개적으로 노출 된 유형과 동일하게 표시되지 않습니다.

실행 파일은 Signed의 Interop.com.dll을 수동으로 참조해야하며, 이는 깨지기 쉬운 느낌입니다.

도움이 되었습니까?

해결책

  1. 서명 된 어셈블리에서 언급 한 모든 어셈블리도 서명해야합니다.

  2. 일반적으로 COM DLL의 저자가 제공하는 서명 된 1 차 인터 로프 어셈블리 (PIA)가 있습니다. 모든 .NET 어셈블리에서 참조하는 부모 COM 유형의 유일한 인터 로프 어셈블리 여야합니다.http://msdn.microsoft.com/en-us/library/aax7sdch.aspx 제 경우에는 PIA가 없습니다.

두 프로젝트를 위해 Visual Studio에서 생성 된 두 개의 Interop 어셈블리는 하나의 인터 로프 어셈블리가 서명되고 다른 하나는 서명되지 않았다는 점에서 다릅니다.

따라서, 인터 로프 어셈블리에 포함 된 유형은 다릅니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top