Visual Studio 형식 라이브러리 가져 오기 도구가 형식 라이브러리 종속성을 추적하는 이유는 .NET에 매핑 할 형식 정보를 수집하기 위해서입니다.
형식 라이브러리에는 직접 종속성 정보가 없습니다. 그래서 이것은 매우 좋은 질문입니다 : 타입 라이브러리 의존성을 추적하는 방법?
형 라이브러리 의존성을 검출하기 만 가능한 방법은 선언 형 라이브러리 내용의 유형을 참조하는 것이다.
예를 들어, 유형 라이브러리가 메소드 서명에서 IXMLDOMDocument
을 참조하면 유형 정보 레코드에 기록됩니다.
형식 라이브러리를로드하고 ITypeLib
을 가져 와서 ITypeInfo
을 반복적으로 열거하여 형식 라이브러리를 크롤링 할 수 있습니다.
결국이 레코드가 표시됩니다. 그런 다음 형식의 포함 형식 라이브러리 ID를 ITypeInfo::GetContainingTypeLib
통해 가져올 수 있습니다. 다른 유형 라이브러리를 참조하는 경우 종속성을 발견했습니다.
크롤러는로드 할 유형 라이브러리가 없어 질 때까지 종속성을 계속 추적 할 수 있습니다.
엄격하게 필요한 유형 집합을 찾기 위해 모든 유형 라이브러리의 모든 유형을 크롤링 할 필요는 없지만 형식 라이브러리 가져 오기 도구는 형식 라이브러리 정보를 .NET 유형 정보 및 메타 데이터 어셈블리로 미러링하므로 형식 라이브러리를 모두 가져옵니다. 구현하기 쉽고 설명과 이해를 돕고 루트 유형 라이브러리의 컨텍스트 외부에서 출력을 재사용 할 수 있습니다.
초기 바인딩을 사용하지 않은 경우 유형 라이브러리에 IDispatch
, IUnknown
및/또는 VARIANT
이 표시되어 종속성을 감지하지 못하게됩니다.
격리 된 응용 프로그램에서 등록이 필요없는 COM을 사용하여 종속성을 정렬 할 수 있지만 여전히 적절한 종속성 트리 일 필요는 없습니다. 하나의 매니페스트에 모든 종속성을 기술 할 수 있습니다.
그리고 type library! = DLL을 기억하십시오. 형식 라이브러리는 DLL 또는 자체 TLB 파일에 리소스로 포함될 수 있습니다.
그래서,이 모든 이야기에 대한 유형 종속되지 클래스/컴포넌트 또는 다른 런타임 종속성입니다.
* 종속성 정보도 포함되어 있으므로 레지스트리에서 종속 형 라이브러리 (HKLM \ Software \ Wow6432Node \ Classes \ Typelib 키)를 찾을 수 있습니다. * -이 종속성 정보는 어디에 있습니까? – acelent
형식 라이브러리에 있습니다. Oleview.exe를 사용하여 importlib() 문을 봅니다. –
흠, 실제로 TLB는 가져온 라이브러리를 참조합니다. 그러나 tlbimp.exe & co. 'ITypeLib'에서 얻을 수있는 데이터를 순회하는 것만 보입니다. ITypeLib는 ITypeInfo (예 : 상속, 메소드 인수, 메소드 반환 유형 또는 필드 유형)가 추가 된 인터페이스, 구조체 등의 ITypeInfo를 반환합니다. 본질적으로'ITypeInfo :: GetContainingTypeLib'을 통해 다른 타입 라이브러리에 포함되어있다. – acelent