Conserver la version correcte d'une DLL COM référencée dans un projet .NET

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

  •  09-06-2019
  •  | 
  •  

Question

Je souhaite référencer une DLL COM dans un projet .NET, mais je veux également m'assurer que la DLL d'interopérabilité créée aura la version correcte (afin que les correctifs sachent quand la DLL doit être modifiée).

Si j'utilise TlbImp Je peux spécifier la version requise avec le /asmversion flag mais lorsque je l'ajoute directement depuis Visual Studio, il obtient une version qui n'a rien à voir avec la version originale de la DLL COM.

J'ai essayé de changer la version dans le .vcproj déposer

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

Mais le projet n'a pas pu être construit avec l'erreur suivante :

erreur CS0246 :Le type ou le nom d'espace de noms 'MYDLLLib' est introuvable (il vous manque une directive using ou une référence d'assembly ?)

Existe-t-il un moyen d'y parvenir sans créer toutes mes références COM avec TlbImp à l'avance?

Si la réponse est Oui existe-t-il un moyen de spécifier un numéro de build en plus des versions majeures et mineures ?(par exemple 1.2.42.0)

Était-ce utile?

La solution

Le Guid fait référence au Guid du TypeLib et non directement à la DLL.Les numéros de version font référence à la version de TypeLib et non aux DLL.

Le numéro de version proviendra de votre fichier idl, et je pense qu'il ne prend en charge qu'une version majeure et mineure et non une version de build.Cette version change-t-elle lorsque vous modifiez la typelib ?

Les numéros de version apparaîtront dans le registre sous :

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

Si la version mineure est définie sur 0, je pense qu'elle importera la "dernière" version qui correspond à la version majeure, mais la version majeure doit être définie sur quelque chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top