Manter a versão correta para uma dll COM referenciada em um projeto .NET

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Quero fazer referência a uma DLL COM em um projeto .NET, mas também quero ter certeza de que a DLL de interoperabilidade criada terá a versão correta (para que os patches saibam quando a DLL deve ser alterada).

Se eu usar TlbImp Posso especificar a versão necessária com o /asmversion flag, mas quando eu o adiciono diretamente do Visual Studio, ele obtém uma versão que não tem nada a ver com a versão original da DLL COM.

Eu tentei mudar a versão no .vcproj arquivo

<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>

Mas então o projeto falhou ao construir com o seguinte erro:

erro CS0246:O tipo ou nome do namespace 'MYDLLLib' não foi encontrado (falta uma diretiva using ou uma referência assembly?)

Existe alguma maneira de fazer isso sem criar todas as minhas referências COM com TlbImp antecipadamente?

Se a resposta for sim existe uma maneira de especificar um número de compilação além das versões principais e secundárias?(por exemplo, 1.2.42.0)

Foi útil?

Solução

O Guid refere-se ao Guid do TypeLib e não à DLL diretamente.Os números de versão referem-se à versão do TypeLib e não às DLLs.

O número da versão virá do seu arquivo idl e acredito que ele suporta apenas uma versão principal e secundária e não uma versão de compilação.Esta versão muda quando você modifica o typelib?

Os números da versão aparecerão no registro em:

HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor

Se a versão secundária estiver definida como 0, acredito que ela importará a versão 'mais recente' que corresponde à versão principal, mas a versão principal deve ser definida como algo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top