소개
COM DLL을 참조하는 .NET 프로젝트에서 작업할 때, 프로젝트가 인터롭 DLL의 올바른 버전을 유지하도록 하는 것이 매우 중요합니다. 이는 호환성을 추적하는 데만 필요한 것이 아니라, 응용 프로그램이 업데이트와 패치를 통해 원활하게 작동하도록 보장하는 데에도 필수적입니다. 이 블로그 게시물에서는 .NET 환경에서 COM DLL 참조의 버전을 올바르게 관리하는 방법과 일반적인 함정을 다룰 것입니다.
문제의 본질
문제는 Visual Studio를 사용하여 COM 참조를 추가할 때 발생합니다. 기본적으로 할당된 버전이 원래 COM DLL의 버전과 일치하지 않을 수 있습니다. 이 불일치는 특히 패치가 관련될 때 어려움을 초래할 수 있습니다. 다음과 같은 질문을 할 수 있습니다:
- 어떻게 하면 생성된 인터롭 DLL에 올바른 버전이 있는지 확인할 수 있을까요?
- 메이저 및 마이너 버전과 함께 빌드 번호를 포함시킬 방법이 있나요?
해결책을 살펴보겠습니다!
COM 참조 버전 이해하기
해결책을 살펴보기 전에, 버전이 어디에서 오는지를 이해하는 것이 중요합니다:
-
타입 라이브러리 (TypeLibs): COM에서는 버전이 DLL 자체보다는 주로 타입 라이브러리와 관련이 있습니다. GUID는 TypeLib을 참조하며, 버전 번호는 해당 TypeLib의 VersionMajor 및 VersionMinor 속성에 해당합니다.
-
레지스트리 저장: 버전 번호는 Windows 레지스트리의 다음 위치에 저장됩니다:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
여기서 메이저 버전은 반드시 있어야 하며, 마이너 버전은 0으로 설정할 수 있습니다. 이는 최신 버전을 가져오게 됩니다.
COM DLL 버전 관리를 위한 단계
1. DLL 대신 타입 라이브러리 참조하기
COM DLL을 직접 참조하는 대신 타입 라이브러리를 참조하세요. 이렇게 하면 연관된 버전 관리를 상속받을 수 있습니다. TlbImp
를 사용할 때 /asmversion
플래그를 포함시켜 원하는 버전을 지정해야 합니다.
2. Visual Studio를 사용하여 버전 설정하기
Visual Studio를 사용할 때 수동으로 버전을 설정하려면 .vcproj
파일을 수정하는 것이 도움이 될 수 있습니다. 다음은 안내를 위한 예시입니다:
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
3. 레지스트리 설정 확인하기
변경을 완료한 후, 새 버전 번호가 레지스트리에 올바르게 나타나는지 확인합니다. 이 확인 단계는 애플리케이션이 업데이트를 통해 계속 올바르게 작동할 것이라는 안심을 제공합니다.
4. 버전 지원의 제한 사항
불행히도, 버전 시스템은 메이저 및 마이너 버전 번호만 지원하며 빌드 버전은 수용하지 않습니다. 이는 TypeLib과 관련된 IDL 파일에 의해 결정됩니다. 보다 세부적인 버전 정보를 원하신다면, 프로젝트 관리 시스템에서 명명 규칙을 따르는 것을 고려해 보시기 바랍니다.
결론
.NET 프로젝트에서 참조된 COM DLL의 인터롭 DLL이 올바른 버전을 유지하는 것은 복잡할 수 있지만, 위에서 설명한 단계를 따르면 더 관리하기 쉬운 접근 방식을 달성할 수 있습니다. TypeLib 버전에서 직접 DLL 버전보다는 TypeLib 버전에 집중하고 수정 후 레지스트리 설정을 확인하는 것이 핵심입니다.
이러한 방법을 사용하면 버전 불일치로 인한 불만을 피할 수 있을 뿐만 아니라 업데이트를 간소화하고 패치를 통해 애플리케이션의 무결성을 유지할 수 있습니다.
.NET 프로젝트에서 COM DLL 버전 관리에 대한 추가 질문이나 의견이 있다면, 여러분의 경험을 자유롭게 공유해 주세요!