.NET 프로젝트에서 참조되는 COM dll의 올바른 버전을 유지합니다.

StackOverflow https://stackoverflow.com/questions/41832

  •  09-06-2019
  •  | 
  •  

문제

.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으로 설정되면 메이저 버전과 일치하는 '최신' 버전을 가져올 것이라고 생각하지만 메이저 버전은 다른 것으로 설정되어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top