2009-04-28 4 views
8

VC++에서 개발 된 COM 구성 요소 세트가 있습니다. 이러한 구성 요소에 대한 참조가 .NET 프로젝트에 추가되면 Visual Studio에서 interop 어셈블리를 생성합니다. 우리는 지금 그러한 어셈블리들을 가지고 있습니다.interop 어셈블리에 서명해야합니까?

매일 빌드를 실행하는 동안 생성 된 모든 바이너리에 디지털 서명으로 서명합니다. Interop 어셈블리는 우리가 저자라고 느끼지 않아 서명되지 않았습니다. 누구나 Visual Studio를 사용하여 동일한 어셈블리를 생성 할 수 있습니다.

interop 어셈블리에도 서명해야합니까? 우리는 또한 강력한 이름 (sn.exe 유틸리티)으로 서명해야합니까? 그렇게하는 이유는 무엇입니까?

답변

8

다소 시간이 많이 걸렸습니다. 이 문제는 코드가 인 Interop 어셈블리를 배포해야 할 필요가 있다는 사실에서 비롯됩니다. 자신의 어셈블리에 서명 할 수 있습니다. 어셈블리에 서명하면 Interop 어셈블리를 포함하여 참조하는 모든 어셈블리에도 서명해야합니다. 그래서 그들에게 서명해야합니다.

독립 실행 형 응용 프로그램을 배포하는 경우 위험이 없으므로 더 쉽게 작업 할 수 있도록 어셈블리에 서명해야합니다.

구성 요소 라이브러리를 배포하는 경우 라이브러리를 사용하는 다른 개발자가 자체 interop 어셈블리를 생성 할 수 있지만 자신의 키로 서명 할 수 있기 때문에 약간 까다로울 수 있습니다. 이로 인해 모든 종류의 이름 지정 및 종속성 문제가 발생합니다.

Interop 어셈블리의 복잡성에 따라 프록시 코드를 별도의 .CS/.VB 파일로 생성하여 어셈블리로 직접 컴파일 할 수 있습니다. 그렇다면 강력한 이름 문제에 대해 걱정할 필요가 없습니다.

+0

전 C# 소스 코드에 COM의 상호 운용성 프록시를 생성하는 방법에 대한 후속 질문을 게시했습니다 http://stackoverflow.com/questions/1058289/how -do-i-generate-com-interop-proxy-c-source-code –

3

우리는 Sn.exe를 사용하여 COM 개체 주변의 래퍼로 도구에서 생성 된 상호 운용성 집합의 강력한 이름을 지정합니다. 어셈블리를로드하는 어셈블리가 서명되어 있으므로 서명해야합니다.

는 우리가 사용하는 interop 어셈블리를 생성하려면 :

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 

은 분명히 제거/delaysign을 완전히 서명하는 경우.

assmeblies를 제작하지 않는 경우이 경우 일 수 있지만 사용자가 책임을집니다. 다른 사람이 실수로 (또는 실수로) 코드를 교체하지 않도록하려는 경우 다른 코드에 적용 할 때와 동일한 수준의 서명/강력한 이름을 적용해야합니다. "키 파일"에 의해 "공개 키"를 교체

0

는 :

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 
+0

그리고 어떻게됩니까? – sharptooth