programing

"COM Interop 등록"대 "어셈블리 COM 표시"

nasanasas 2020. 11. 15. 11:22
반응형

"COM Interop 등록"대 "어셈블리 COM 표시"


이 두 옵션의 실제 차이점은 무엇입니까? 내가 아는 것은 :

COM Interop에 등록
이 옵션은 어셈블리에 대해 regasm을 실행하고 모든 COM과 같은 레지스트리 항목이있는 레지스트리에서 어셈블리를 COM 구성 요소 (또는 그렇지 않을 수도 있음)로 등록합니다. 이 단계에서 TLB 파일이 생성됩니까? 또 무엇을하나요?

프로젝트를 컴파일 할 때 tlb가 생성되는 것을 볼 수 있지만 때로는 그렇지 않습니다. 왜 그런가요?

어셈블리 COM을 보이게 만들기
이것은 어셈블리에 어떤 영향을 미칩니 까? 이 어셈블리 내에 다음 형식이있는 경우 내 형식이 ComVisible로 표시되어 있어도 "Make assembly COM Visible"을 지정해야합니까?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}

"Make assembly COM visible"은 어셈블리의 모든 공개 유형을 [ComVisible] 로 만드는 큰 망치 입니다. 드물게 바람직하지만 스 니펫에서했던 것처럼 표시하려는 특정 유형을 선택하는 것이 좋습니다.

어셈블리가 빌드 된 후에는 COM 클라이언트가 다시 찾을 수 있도록 등록해야합니다. 생성하려는 개체를 식별하기 위해 숫자 만 사용하는 GUID, DLL이 구현하는 것을 찾으려면 추가 조회가 필요합니다. 등록에는 HKLM\Software\Classes\CLSID\{guid}레지스트리 부분에 키 쓰기가 포함됩니다 . 직접 실행 Regasm.exe /codebase /tlb하거나 어셈블리를 빌드 한 후 자동으로 수행하도록 빌드 시스템에 맡길 수 있습니다.

"Register for COM interop"이 수행하는 작업입니다. DLL의 이전 복사본이 덮어 쓰기 전에 자동으로 등록 취소되어 레지스트리 오염을 방지하므로 바람직합니다. VS는 이러한 레지스트리 키에 대한 쓰기 권한을 가지기 위해 상승 된 권한으로 실행되어야하는데, 이는 선택 사항으로 만드는 이유 중 하나입니다. 또는 빌드 서버에서 일반적으로 등록하고 싶지 않습니다. 더 많은 진단없이 .tlb를 얻을 수없는 이유에 대해 설명 할 수 없습니다.


선택한 답변에 작성된 주석 외에도. RegAsm 유틸리티의 / U 옵션을 사용하여 Windows 레지스트리에서 해당 레코드를 먼저 제거하지 않고 (또는 라이브러리를 사용하는 응용 프로그램이나 서비스를 닫지 않고) 유형 또는 방법이 변경된 경우 tlb 파일이 생성되지 않습니다.

Regasm.exe yourlibrary.dll /codebase /tlb /u

또한 라이브러리를 COM으로 사용하기위한 레지스트리는 Register for COM interopMake assembly COM-Visible 옵션을 사용하여 컴파일 된 경우에만 개발 컴퓨터에서 작동한다는 점을 언급하는 것이 중요합니다 . 표시된 명령 줄을 사용하여 각 대상 컴퓨터에 수동으로 등록하거나 라이브러리 설치시 실행되는 스크립트를 생성해야합니다.

이 댓글을 답변으로 남겨 주셔서 죄송 합니다만, 평판 50 점을 요청했기 때문에 글에 댓글을 달 수 없습니다.

참고 URL : https://stackoverflow.com/questions/3699767/register-for-com-interop-vs-make-assembly-com-visible

반응형