.NET 프로젝트에서 참조되는 COM dll의 올바른 버전을 유지합니다.
문제
.NET 프로젝트에서 COM DLL을 참조하고 싶지만 생성된 interop DLL의 버전이 올바른지 확인하고 싶습니다(패치가 DLL을 변경해야 하는 시기를 알 수 있도록).
내가 사용한다면 TlbImp
다음을 사용하여 필요한 버전을 지정할 수 있습니다. /asmversion
플래그를 지정했지만 Visual Studio에서 직접 추가하면 원래 COM DLL 버전과 아무 관련이 없는 버전이 표시됩니다.
버전을 바꿔보려고 했는데 .vcproj
파일
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<!-- I changed this -->
<VersionMajor>1</VersionMajor>
<!-- This too -->
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
그러나 다음 오류로 인해 프로젝트가 빌드되지 않았습니다.
오류 CS0246:'MYDLLLib' 유형 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문이나 어셈블리 참조가 누락되었습니까?
모든 COM 참조를 생성하지 않고 이 작업을 수행할 수 있는 방법이 있습니까? TlbImp
미리?
대답이 다음과 같다면 예 메이저 버전과 마이너 버전 외에 빌드 번호를 지정하는 방법이 있나요?(예: 1.2.42.0)
해결책
Guid는 DLL이 아닌 TypeLib의 Guid를 직접 참조합니다.버전 번호는 DLL이 아닌 TypeLib의 버전을 나타냅니다.
버전 번호는 idl 파일에서 가져오며 빌드 버전이 아닌 주 버전과 부 버전만 지원한다고 생각합니다.typelib를 수정하면 이 버전이 변경됩니까?
버전 번호는 다음 레지스트리 아래에 표시됩니다.
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
마이너 버전이 0으로 설정되면 메이저 버전과 일치하는 '최신' 버전을 가져올 것이라고 생각하지만 메이저 버전은 다른 것으로 설정되어야 합니다.