Affichage des articles dont le libellé est Assemblies. Afficher tous les articles
Affichage des articles dont le libellé est Assemblies. Afficher tous les articles

Comment rendre mes Assemblies visibles depuis Visual Studio

On a vu dans le post précédent comment utiliser le GAC pour y ajouter des Assemblies et je pensais sincèrement qu'en mettant mon assembly dans le Global Assembly Cache (GAC), je le verrais facilement dans Visual Studio en faisant "Add Reference ..." et en choisissant l'onglet ".NET" mais il n'en est rien !

Mettre un assembly dans le GAC ne permet pas de le "voir" depuis Visual Studio et pourtant cela me serait bien utile. Je travaille en ce moment avec log4net et dans les exemples que je trouve sur Internet, la référence est toujours "cassée".

Dans mes recherches pour tenter de trouver comment faire, je tombe sur des pages plus ou moins farfelues dont l'une dans le MSDN que je trouve légèrement compliquée. Il faut chercher à la rubrique "To display an assembly in the Add Reference dialog box".

Voici ma technique pour utiliser facilement mes assemblies, ceux que j'ai envie d'utiliser souvent avec Visual Studio. Une fois l'assembly dans le GAC, vous poursuivez par l'ajout d'une clef de registre.

Ajout d'une clef de registre pour Visual Studio

Bref, je me créé un petit fichier : MyAssemblies.reg avec le contenu suivant :

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies] @="E:\\Assemblies"

Car je souhaite mettre mes Assemblies sur mon disque E: dans le répertoire "Assemblies". Ensuite, je double clique sur le fichier .reg pour ajouter la clef de registre dans la base de registre :

Inscrire la clef de registre "AssemblyFoldersEx\MyAssemblies" dans la base de registre
Clef de registre créée correctement
Je retourne dans mon Visual Studio ma référence est toujours cassée :

Référence à la DLL log4net cassée
Mais je sais que si je clique dessus, la petit icône jaune "Attention" va disparaître comme par enchantement :
DLL log4net trouvée automatiquement dans E:\Assemblies
Voilà, la référence à "\\Assemblies\log4net.dll" est maintenant correctement renseignée dans mon projet.

Remarque :
La DLL log4net n'est toujours pas visible depuis l'un des onglets "Add Reference ..." mais bon ... nous avons au moins appris quelque chose. Il s'agit certainement d'un problème de rafraichissement.

Conclusion

Pour qu'un assembly soit plus facile à utiliser depuis Visual Studio, il faut les deux choses :

  • Que l'assembly soit dans le GAC
  • Que la clef de registre pour Visual Studio existe avec le répertoire des assemblies




Assemblies et le Global Assembly Cache (GAC)

Les assemblies prennent la forme d'exécutables .exe ou de libraires .dll (dynamic linked librairie). Des développeurs peuvent très bien fournir un ensemble de modules qui pourront être assemblés ensembles.
Visual Studio ne peut créer qu'un seul assembli. Pour lier ou créer plusieurs assemblies et le lier entre eux nous devons utiliser le compilateur csc.exe et l'assemblies linker al.exe en ligne de commandes.

Comment construire un assemblie multifichiers

Visualiser le contenu d'un assembly

On peut consulter le contenu d'un assemblie en utilisant l'outil ildasm.exe (MSIL Disassembler - MicroSoft Intermédiate Language) depuis la console de commande Visual Studio :

Lacement de Ildasm depuis la console de commande Visual Studio
Visualisation du contenu d'un assembly grâce à Ildasm

Utilser gacutil pour gérer les assemblies du Global Assembly Cache

Pour être inclus dans le GAC un assembly doit posséder un nommage fort (strong-name) qui garanti son unicité.

Un assembly du GAC possède les caractéristiques suivantes :
Il ne sera chargé en mémoire que s'il est requis, autrement dit le GAC est un moyen efficace de gérer les ressources d'un grand projet.
On peut obtenir programmatiquement des informations sur un assembly en utilisant la Réflection (moyen de découvrir les méthodes et les propriétés d'un objet que l'on ne connait pas).

Signer un assembly avec un nom fort

Ensuite, on utilise l'outil gacutil.exe fournit dans le SDK. Cet outil ne doit utilisé qu'en développement, en déploiement il faut utiliser le Windows Installer pour installer des assemblies dans le Cache.

La commande pour lister les assemblies du cache est :
>gacutil -l

Installer un assembly dans le cache
Retirer un assembly du cache

Manifest d'assembli

C'est un peu la signature de l'assembli, il contient son nom sa version, la liste des références à d'autres assemblies. Parce que les manifest d'assemblies contiennent toutes les informations nécessaires sur l'assembly parce qu'il n'est pas lié aux clefs de registre, cela réduit les conflits de .dll et rend les applications plus faciles à déployer.