Question: Quand dois-je déployer mon assembly dans le GAC?
Réponse: Jamais
Réel, honnête, Vraie Réponse: presque Jamais
Discussion
Seulement la chute des choses dans le GAC lorsque plusieurs applications sur la machine utilisera l'assemblée, et lorsque l'assemblée est à la base (susceptible d'être utilisé par plusieurs applications), quand il est signé, et quand vous comptez presque jamais de mise à jour de cette assemblée. Peut-être ajouter que, lorsque le fait d'avoir plusieurs versions indépendantes d'une DLL déployé avec chaque application pourrait être dommageable.
Un exemple de ce dernier est: supposons que vous avez 2 applications indépendantes, indépendamment développé et déployé indépendamment. Néanmoins, il y a un possibbility qu'ils vont communiquer entre eux. Ils vont échanger ... quelque chose... de plus .NET Remoting sur la machine locale. Si vous avez un seul assembly dans le GAC, ces applications sont assurés que l'inter-communication tout fonctionne. Si, toutefois, ils ont chacun une version distincte de l'assemblée, ils peuvent ne pas être en mesure d'échanger des objets. C'est un événement rare que vous n'avez probablement pas besoin. Si vous n'êtes pas sûr, alors vous n'en avez pas besoin.
La base GAC scénario est le .NET de la Bibliothèque de classes de Base. Ces assemblées sont fournis par Microsoft. Ils font foi. Ils sont fondamentaux. et signé. Ils changent rarement. Toutes les applications doivent utiliser les mêmes copies de ces Dll. Par conséquent, ils appartiennent à la GAC.
En revanche, votre demande de Dll sont pas de Microsoft, ils ne sont pas fondamentales, et probablement pas signé. Ils changent plus souvent, et il y a seulement quelques applications (peut-être un seul!) qui DLL. Pas de GAC.
Je ne pouvais imaginer un périphérique matériel, disons un appareil photo numérique, qui installe une .NET de l'assemblée pour permettre la programmabilité. C'est un scénario où l'assemblée pourrait bien s'insérer dans le GAC. Il permet à l'arbitraire .NET applications pour accéder à l'appareil photo numérique par programmation.
Votre log4net exemple n'est pas, à mon avis, suffisant pour justifier la mise en service de l'assembly dans le GAC. Imaginez un scénario où l'une des applications obtient une mise à jour, et dans le cadre de la mise à jour, il utilise une nouvelle version de log4net. Maintenant ce qui? Si le nouveau log4net assemblée être placé dans le GAC? Probablement pas.
L'idée de partager Dll à travers les applications, était fondée sur la prémisse que la mémoire et le stockage des disques rares. Une fois, que c'était vrai. Il n'est pas vrai, plus longtemps. En cas de doute, n'utilisez pas le GAC.