2009-10-12 9 views
3

Comment puis-je obtenir l'emplacement du GAC répertoire en utilisant C#?Comment puis-je obtenir l'emplacement du GAC en utilisant C#?

Existez-vous dans le Registre Windows?

MISE À JOUR

J'ai besoin parce que l'emplacement, je veux énumérer et d'analyser les ensembles situés dans le GAC.

Salut.

+2

Woah, woah woah. Tenez-vous là une minute! Ce n'est pas * vraiment * un dossier. Je pense que ce n'est qu'une petite partie de ce que vous essayez d'accomplir; Voir: http://stackoverflow.com/questions/205188/whats-the-correct-way-of-registering-installing-an-assembly-to-the-gac –

+1

Il n'existe pas de "répertoire GAC". Le GAC est juste une liste d'assemblées. – overstood

+3

C'est un système de fichiers virtuel - semble trop pédant pour dire que ce n'est pas un répertoire. Comme vous pouvez le voir en faisant un 'dir% windir% \ assembly', cela ressemble à un ensemble de répertoires pour le reste du monde! – Cheeso

Répondre

5

Si vous voulez énumérer les choses dans le GAC (par exemple, écrire un outil d'administration système), votre meilleure option est d'utiliser le fusion.dll bien que cela nécessite un code Interop de votre côté.

Link to Microsoft for Fusion.DLL Documentation

+0

Cela semble être la technique la mieux supportée pour "énumérer et analyser" des choses dans le GAC. –

+0

Croyez-moi, vous ne voulez pas compter sur où le GAC "apparaît" être dans le système de fichiers. Cela peut changer. –

+1

C'est exactement pourquoi l'utilisation de Fusion pourrait être une bonne idée ici. – Foxfire

1

N'est-ce pas toujours %windir%\assembly?

modifier:

c:\Windows>dir \windows\assembly 
Volume in drive C has no label. 
Volume Serial Number is C8BC-2EBD 

Directory of c:\windows\assembly 

08/14/2009 03:06 AM <DIR>   GAC 
07/28/2009 03:07 AM <DIR>   GAC_32 
09/08/2009 10:57 PM <DIR>   GAC_MSIL 
08/15/2009 07:35 PM <DIR>   NativeImages_v2.0.50727_32 
09/08/2009 10:57 PM <DIR>   temp 
09/08/2009 09:47 PM <DIR>   tmp 
       0 File(s)    0 bytes 
       6 Dir(s) 4,560,822,272 bytes free 
+0

Non, ce ne sera pas toujours '% windir% \ Assembly'. Il se trouve que c'est le cas en ce moment, mais c'est l'emplacement actuel et sa structure n'est pas garantie pour rester le même, et les fichiers dans les API ne sont pas une API raisonnable pour installer ou lire les informations du GAC. –

+0

@Robert il est hautement improbable que Microsoft le change, car cela serait un grand risque pour la rétrocompatibilité. (Pour ne pas dire que c'est OK pour essayer de le faire) –

1

Il est dans le dossier% windir% \ assembly.

Dan a obtenu la réponse d'abord en ce qui concerne un exemple de code.

+1

allez-vous garder le secret alors? – Cheeso

+1

Probablement parce que si vous cherchez le dossier GAC, vous faites quelque chose de mal. La "localisation" du GAC n'est PAS fixée, et il n'y a pas d'API pour le rechercher. –

+0

Je suis entièrement d'accord avec vous qu'il peut y avoir quelque chose (très) faux s'il a besoin de ce dossier. D'un autre côté, peut-être qu'il veut juste développer un outil d'information. Alors pourquoi pas. En fait, cela aurait même du sens puisque le dossier n'est pas ouvert dans l'explorateur par défaut. Et l'exemple de code montre qu'il n'est pas difficile d'obtenir le chemin. – Foxfire

0

Laissez l'environnement d'exécution gérer ses assemblages et assurez-vous qu'ils seront présents. Si vous avez besoin d'installer quelque chose, utilisez gacutil. Si vous devez désinstaller quelque chose, utilisez gacutil. Si vous devez accéder à un assembly, ajoutez-y une référence dans votre projet. Si vous avez besoin d'interagir avec le GAC sur la machine de quelqu'un d'autre, faites ce que dit @Dan et utilisez MSI et vos amis.

Sinon NE PAS TOUCHER LE GAC

+0

gacutil est pour les développeurs; les applications de production devraient utiliser MSI et ses amis. –

+0

@Dan, c'est tout à fait correct. Je vais éditer mon post. – overstood

1

Il y a des raisons tout à fait valables pour accéder au GAC manuellement comme un dossier. Bien sûr, il faut être conscient du risque de manipuler les choses là-bas. Mais l'accès en lecture seule est tout à fait correct, je dirais. Outre le% windir% \ assembly mentionné ci-dessus, il se peut que Nir Sofer ait déjà fait le travail pour vous. Il a écrit GACView.

Et puis, il a même une fonctionnalité pour désactiver la vue spéciale dans l'Explorateur: Options/Disable Assembly Viewer dans l'Explorateur. Le dossier apparaîtra alors comme un dossier normal. Bien que cela fonctionne bien sur Windows XP, il ne fonctionne pas sur Windows 7 64 bits, car il est défini dans la version 32 bits du Registre. Pour désactiver la visionneuse d'assemblage sur Windows 7 64 bits, lancez Regedit (64 bits), passez à

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 

et ajoutez une nouvelle DWORD appelée DisableCacheViewer avec la valeur 1.

Pour être indépendant du répertoire (qui pourrait changer), vous pouvez énumérer les ensembles via le Registre Fusion clé:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default 

Je suppose que cela est de savoir comment fonctionne GACView en interne. Mais il n'énumère toujours pas les assemblys .NET 4 dans% windir% \ Microsoft.NET \ assembly.

Un outil qui prend en charge.NET 4 est GACBrowser, mais il affiche moins d'informations.

Questions connexes