Question Pourquoi ne devrais-je PAS utiliser le GAC?


Il y a eu quelques questions posées le long de cette ligne stackoverflow telles que Quels sont les avantages et les inconvénients de l'utilisation du GAC? et Quand et quand ne pas installer dans le GAC? et quelques personnes l'ont demandé sur le web exposer. Je ne peux pas argumenter de manière convaincante pour ne pas utiliser le GAC. Je suis sûr que je suis naïf, mais il semble qu'il y ait plus d'avantages (tels que les problèmes de contrôle des performances et des versions) à utiliser le GAC que de ne pas l'utiliser.

Pourquoi ne devrais-je PAS utiliser le GAC?


22
2018-02-11 20:49


origine


Réponses:


Chris Sells donne probablement la meilleure raison d'éviter le GAC où vous pouvez:

Cela revient à dire que tous les emplacements partagés pour les mises à jour, que ce soit un CLSID COM, Windows \ System32 ou le GAC, sont dangereux et doivent être évités. Et c'est pourquoi le scénario de déploiement .NET préféré est «déploiement xcopy», c'est-à-dire avoir votre propre copie privée de chaque DLL que vous testez et déployez avec le reste de votre application.

"Aha!" vous dites. "Le GAC prend en charge plusieurs versions d'un assemblage! Lorsqu'un fichier foo.dll est mis à jour vers la version 1.1, v1.0 se trouve juste à côté, de sorte que votre application ne pas "Bien sûr, c’est absolument vrai. Mais si c’est le cas, pourquoi est-ce que ça vous intéresse?

"Encore une fois, vous dites." Je peux mettre une politique d'éditeur dans le GAC avec mon assemblage pour que les applications sont mis à jour automatiquement! "C'est vrai aussi, mais maintenant, comme toutes les stratégies de remplacement de code à l'échelle de la machine, vous êtes sur le point d'obtenir une responsabilité impressionnante: assurez-vous que près de 0% des applications vous sont connues ou pas, ne pas casser. C'est une responsabilité impressionnante qui prend des centaines d’années d’expérience à chaque nouvelle version du .NET Framework. Si c'est une responsabilité de test avec laquelle vous êtes prêt à vivre, je vous admire, personnellement, je n’ai pas le courage moral d’assumer ce fardeau.


43
2018-02-11 21:04



Nous avons une application qui contient plus de 50 assemblys .NET à tout moment et nous n'utilisons pas le GAC. Je pense que le GAC est plus utile si vous devez exécuter plusieurs versions de votre application à la fois, chacune devant charger une version différente de la même bibliothèque partagée.

Même dans ce cas, si les deux versions de l'application se trouvent dans des répertoires différents, tant que vous gardez leurs fichiers binaires séparés, vous n'avez toujours pas besoin du GAC.

J'ai toujours pensé qu'il était beaucoup plus utile pour quelqu'un qui fabrique un SDK / API, où différentes versions de son SDK peuvent être chargées par plusieurs applications et vivre en harmonie. Donc, si vous êtes dans ce bateau, le GAC peut avoir du sens.

Il y a quelques cas marginaux qui nécessitent le GAC (je pense que les composants .NET COM + doivent être dans le GAC dans certains cas), mais je pense que ce sont un petit pourcentage des cas.


6
2018-02-11 21:00



Si vous souhaitez un déploiement moins intrusif de votre application. En installant uniquement dans votre répertoire d'application, vous pouvez copier et déployer très facilement.


3
2018-02-11 20:56



Si vous avez une petite application peu gourmande en ressources, je ne voudrais pas installer de fichiers dans le GAC.

Cela créerait une autre dépendance que je devrais vérifier dans ma désinstallation et il y a eu beaucoup de chagrin dans le passé concernant les programmes qui abusent du registre.

Il serait également un peu plus facile pour le débogage / maintenance, car vous pouvez facilement vérifier que toutes les bibliothèques appropriées se trouvent dans le chemin exécutable de l'application.


2
2018-02-11 20:57



J'ai demandé quelque chose de similaire (Dois-je vraiment utiliser le Global Assembly Cache (GAC)?)

La meilleure réponse était que "le GAC n'est utile que si vous enregistrez des bibliothèques que vous allez réutiliser".

En d'autres termes, ne l'utilisez pas si vous ne partagez pas de bibliothèques entre différentes applications.


2
2018-02-11 21:19



Quelle est l'utilisation de GAC?

i) Vous pouvez stocker plusieurs versions du même assemblage sur une machine et les exécuter côte à côte. ii) Stocker les mêmes assemblages à plusieurs endroits sur une machine utilise un stockage supplémentaire inutile. Les garder dans un endroit réduit ce coût. iii) Les assemblages sur une machine deviennent plus simples car il suffit de mettre à jour un emplacement (le GAC) plutôt que de rechercher plusieurs instances d'un assemblage stocké sur une machine.


2
2018-03-16 11:53



Parfois, sur des sites Web hébergés, vous ne contrôlez pas le GAC et certains fournisseurs d'hébergement ne vous autoriseront pas à installer des assemblages dans le GAC. Je me suis heurté à cela avant et c'est une énorme douleur.


1
2018-02-11 20:51