l'énumération des assemblées dans le GAC
Comment puis-je énumérer tous les assemblys disponibles dans le GAC en C#?
En fait, je suis confronté à un problème avec un code à la con - l'assemblée appelée Telerik.Web.UI.dll est visée et utilisés dans le projet - cette DLL n'est pas présent dans le dossier BIN. Et l'application fonctionne bien sur le serveur mais sur ma machine, évidemment compilateur est de donner à l'erreur. Ex-Développeur insiste sur le fait qu'il n'est pas du GAC sur le serveur et "il est ce que c'est". Maintenant, j'ai besoin de vérifier si cette DLL est enregistrée dans le GAC ou pas.
Aide sera appréciée.
Bonne Journée;
- avez-vous réussi à résoudre ce problème?
- nop; je n'ai pas pu; plutôt, j'ai téléchargé le .dll fichiers torrents (même version) et ils ont travaillé. Je ne comprends toujours pas d'où ASP .NET est de ramasser le DLLz si elles ne sont pas dans le GAC.
Vous devez vous connecter pour publier un commentaire.
Si vous avez limité l'accès au serveur puis cela peut fonctionner:
Essentiellement, il énumère les premières GAC dossiers. Il fonctionne sur DiscountASP d'hébergement partagé qui pourrait fonctionner pour votre environnement d'hébergement.
Il pourrait être embelli par l'énumération plus profondément dans chaque assemblée dossier pour copier le numéro de version et le jeton de clé publique.
Cochez cette codeproject GAC Interface de l'API article. Il utilise des sans-papiers fusion.dll pour enumurate le GAC. Mais l'auteur affirme que
Vous n'avez pas vraiment besoin d'écrire quelque chose en C# pour savoir si cette dll dans le gac. Vous pouvez utiliser gacutil.exe avec l'option /l à partir de la ligne de commande pour lister le contenu de la GAC.
Si c'est clair jane ASP.NET site de l'assemblée, et n'est pas dans le site du dossier bin ou dans le serveur du GAC (et il n'y a rien de louche dans le web.config), peut-être que le site est un sous-site, de la sorte, et l'un des du site plus haut contient la référence dans le dossier bin (ou quelque chose de louche dans son site web.config, puisque les sous-sites/dossiers héritent le web.les configs de leurs parents)?
Maintenant, si vous avez un environnement où le fichier a été chargé correctement (et il semble que vous n'), vous pouvez simplement demander .NET où l' .dll est en provenance et à l'affichage qu'au lieu, par exemple:
Charge d'une assemblée et d'afficher son emplacement sur le disque, mon résultat est:
C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Shell\2.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Shell.dll
Si elle est sous "C:\Windows\assembly\" vous savez, c'est dans le GAC.
Vous pouvez également le faire sans une Assemblée.Charge d'appel si vous avez déjà référencement de l'assemblée, vous pouvez énumérer les assemblées chargées dans l'application en cours.domaine et il suffit d'imprimer (ou de les rendre à un littéral de contrôle, ou de la Réponse.Écrire, etc...) ce qui leur .Propriétés d'emplacement sont.
Edit:
Le code qui ressemble à quelque chose comme ceci:
Edit:
Sur une pleine confiance de l'environnement, le code suivant (console app) va énumérer le GAC et écrire chaque assemblée, il devrait être facile de le modifier dans un ASP.NET app, mais je ne suis pas sûr si elle va travailler dans un environnement qui est moins que la pleine confiance (juste deviner ici, vous pourriez avoir de la chance):
une méthode simple pour énumérer les fichiers dll dans un répertoire
et vous pouvez obtenir tous les fichiers
Si vous avez besoin de charger chaque assemblée, Vous obtenez une exception pour les différentes version d'exécution. Pour cette raison, vous pouvez charger assemblée avec De l'assemblée.ReflectionOnlyLoadFrom à la charge de l'Assemblée dans la réflexion seulement. Ensuite, l'Assemblée ne se charge pas dans votre domaine d'application et ne jetez pas exception.
Figure, je pourrais aussi bien de jeter dans mon linq en fonction de la solution (pratique si votre simplement à la recherche d'un fichier unique et ne veux pas énumérer tous les fichiers)
fonction pour trouver les fichiers:
Et de l'appeler (je n'avais pas l'Environnement.SpecialFolder.Windows donc utilisé de l'Environnement.SpecialFolder.Système à la place)
De plus, pour info cette méthode énumère l'ensemble de la GAC et vous pouvez trouver des doublons de Dll dans tmp/et temp/, Tmp est utilisé pour l'installation et la température est utilisé pour la désinstallation.
Vérifier la façon dont fusion.dll est utilisé dans ILSpy pour énumérer tous le GAC assemblées.
Fusion COM Wrappers
Principal
Peut-être vous avez besoin GAC spectateur quelque chose comme ceci:
Vidéo: Comment utiliser Ajouter GAC boîte de Dialogue Références
Espère que cette aide
s