Introduction

Lorsqu’on travaille sur un projet .NET qui référence une DLL COM, il est crucial de s’assurer que votre projet maintienne la version correcte de la DLL interop. Cela est essentiel non seulement pour suivre la compatibilité, mais aussi pour garantir que votre application fonctionne sans soucis à travers les mises à jour et les correctifs. Dans cet article de blog, nous allons explorer comment gérer correctement les versions de vos références DLL COM dans un environnement .NET et aborder les pièges courants.

Le Problème

Le problème se pose lorsque vous utilisez Visual Studio pour ajouter une référence COM. Par défaut, la version assignée peut ne pas correspondre à la version de la DLL COM originale. Cette discordance peut entraîner des difficultés, surtout lorsqu’il s’agit de correctifs. Vous pouvez vous poser les questions suivantes :

  • Comment puis-je m’assurer que la DLL interop créée a la bonne version ?
  • Y a-t-il un moyen d’incorporer un numéro de build en plus des versions majeures et mineures ?

Plongeons dans la solution !

Comprendre les Versions de Référence COM

Avant de s’attaquer à la solution, il est important de comprendre d’où provient la gestion des versions :

  1. Bibliothèques de Types (TypeLibs) : Dans COM, la gestion des versions est principalement associée à la Bibliothèque de Types plutôt qu’à la DLL elle-même. Le GUID fait référence à la Bibliothèque de Types, et les numéros de version correspondent aux attributs VersionMajor et VersionMinor de cette Bibliothèque de Types.

  2. Stockage dans le Registre : Les numéros de version sont stockés dans le registre Windows sous :

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

    Ici, la version majeure doit être définie, tandis que la version mineure peut être réglée sur zéro, ce qui signifie qu’elle importera la dernière version correspondante.

Étapes pour Gérer la Version de Votre DLL COM

1. Référencer la Bibliothèque de Types au Lieu de la DLL

Au lieu de référencer directement la DLL COM, référencez la Bibliothèque de Types. De cette manière, vous héritez de la gestion des versions qui y est associée. Assurez-vous, lors de l’utilisation de TlbImp, d’inclure le flag /asmversion pour spécifier la version désirée.

2. Utiliser Visual Studio pour Définir la Version

Pour définir manuellement la version lors de l’utilisation de Visual Studio, l’édition du fichier .vcproj peut être utile. Voici un exemple pour vous guider :

<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. Vérifier les Paramètres du Registre

Après avoir effectué des modifications, vérifiez que les nouveaux numéros de version apparaissent correctement dans le registre. Cette étape de confirmation vous apportera une tranquillité d’esprit que votre application continuera de fonctionner correctement à travers les mises à jour.

4. Limitations du Support des Versions

Malheureusement, le système de version ne prend en charge que les numéros de version majeurs et mineurs et ne permet pas d’inclure une version de build. Cela est déterminé par le fichier IDL associé à votre Bibliothèque de Types. Si vous avez besoin d’informations de version plus granulaires, envisagez de suivre une convention de nommage dans votre système de gestion de projet.

Conclusion

S’assurer que votre DLL interop provenant d’une DLL COM référencée dans un projet .NET maintienne la bonne version peut être complexe, mais en suivant les étapes décrites ci-dessus, vous pouvez adopter une approche plus facilement gérable. Rappelez-vous, la clé est de se concentrer sur la version de la Bibliothèque de Types plutôt que sur la version de la DLL directement, et de vérifier les paramètres du registre après les modifications.

En utilisant ces méthodes, vous éviterez non seulement la frustration des versions incompatibles, mais aussi simplifierez vos mises à jour et maintiendrez l’intégrité de votre application à travers les correctifs.

Si vous avez d’autres questions ou idées concernant la gestion des versions des DLL COM dans les projets .NET, n’hésitez pas à partager vos expériences !