2009-11-19 3 views
0

interop을 통해 많은 관리되는 어셈블리와 ActiveX 및 COM 구성 요소 (C++로 작성된)를 참조하는 관리되는 응용 프로그램의 강력한 이름을 지정하려고합니다. 강하게 명명 된 어셈블리는 약하게 명명 된 어셈블리를 참조 할 수 없기 때문에 내가 준비해야하는 문제점, 특히 ActiveX 및 COM 상호 운용성을 처리 할 때 어떤 문제가 발생했는지 말해 주시겠습니까?강력한 이름으로 관리되는 응용 프로그램에 서명 할 때 고려해야 할 사항은 무엇입니까?

이 응용 프로그램에 대한 솔루션이 큽니다. 관리되는 C#, Vb.net, 기본 C++ 및 관리되는 C++/CLI의 50 개 이상의 프로젝트로 구성됩니다. 따라서 더 많은 정보와 실제 삶에 대한 이야기를할수록 더 잘 준비 할 수 있고 두통을 피할 수 있습니다.

감사합니다.

답변

1

아직 이런 종류의 비주얼 스튜디오 솔루션에 대한 실제 경험이 없습니다. 그러나 정보 herehere이 귀하의 interop 구성 요소에 대한 아이디어를 줄 수 있기를 바랍니다.

1

안정적으로 .snk 파일을 저장하는 것을 제외하고는 아무런 문제가 없습니다.

어셈블리를 사용하는 모든 타사 어셈블리에는 종속 관계 내에서 언급 된 어셈블리에서 키가 있으며 어셈블리를로드 할 때마다로드 된 어셈블리가 해당 키로 서명되어 있는지 여부를 확인합니다. 이는 악의적 인 코드로 어셈블리를 잘못 배치하는 것을 방지하기 위해 수행됩니다.

어셈블리의 earlies 버전에 서명하는 데 사용 된 .snk 파일을 안정적으로 저장하지 않으면 사용자가 참조를 다시 추가하지 않고도 새 버전을 제공 할 수 없습니다. 따라서 .snk 파일을 저장하고 주어진 어셈블리의 각 버전마다 동일한 파일을 사용하십시오. 다른 어셈블리에 대해 다른 .snk 파일을 사용하든 모든 어셈블리에 대해 하나의 .snk 파일을 사용하는지는 별 문제가 아니므로 회사 당 하나의 .snk만으로 충분합니다.

자세한 내용은 this questionthis perfect answer을 참조하십시오.

+0

그게 바로 응용 프로그램의 강력한 이름을 지정하려는 이유입니다. 그러나 응용 프로그램의 아키텍처와 빅 VS 솔루션의 구조에 숨겨진 복잡성에 대해 알고 싶습니다. 감사. – tranmq

1

저는 지금까지도 강력한 이름과 관련된 문제 (COM interop 어셈블리 사용)를 경험하지 않았습니다. 강력한 이름이 아닌 타사 어셈블리를 얻은 경우 직접 서명 할 수 있으므로 모든 어셈블리를 강력한 이름으로 만들 수 있습니다.

물론 interop 어셈블리의 강력한 이름을 지정하면 수정하거나 대체 할 기본 COM DLL이 보호되지 않으므로 강력한 이름의 "보호"가 실제로 COM 구성 요소로 확장되지 않습니다. interop 어셈블리의 이름이 강력하게 지정됩니다.

+0

tlbimp.exe 또는 aximp.exe를 사용하여 interop 어셈블리에 서명하고이를 참조 했습니까? 내가 묻는 이유는 우리 프로젝트 중 하나가 VS를 사용하여 COM 구성 요소를 참조하고 무료로 interop 어셈블리를 생성했기 때문입니다. 감사. – tranmq

+0

저는 TlbImp를 사용했으며 과거에는 ILMerge와 사후 서명 된 어셈블리도 사용했습니다. 나는 VS에 의해 수행 된 자동 SNK 처리의 팬이 아니다. 키 파일이 물리적으로 컴퓨터에 존재해야하기 때문이다. 우리 환경에서는 키 컨테이너에 키가 저장되어 있기 때문에 키를 여러 번 복사 할 필요가 없습니다. – Lucero

관련 문제