2009-06-15 13 views
3

J'essaie d'utiliser Assembly.Load() pour charger un assembly qui se trouve dans le GAC. Par exemple, disons que je veux répertorier tous les types qui existent dans PresentationCore.dll, comment dois-je aller sur le chargement PresentationCore.dll?Comment charger un assembly à partir du GAC?

Quand j'essayez ceci:

Assembly a = Assembly.Load("PresentationCore.dll"); 

Je reçois un FileNotFoundException. Another answer on SO suggéré J'ai utilisé Assembly.LoadFrom() pour accomplir ceci - j'hésite à le faire parce que Assembly.LoadFrom() est déprécié, selon Visual Studio 2008 - plus, il ne semble pas fonctionner réellement.

Des idées?

Répondre

11

Si l'assemblage se trouve dans le GAC, vous devez le charger via son nom complet.

Par exemple, si je voulais charger mscorlib.dll je ferais quelque chose comme ceci:

Assembly a = Assembly.Load 
    ("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); 

La meilleure façon de déterminer le nom complet d'un ensemble est de charger l'ensemble dans Reflector et utiliser le Nom champ du volet d'affichage inférieur comme celui-ci:

http://i42.tinypic.com/2m30ocn.png

+0

Parfait, merci! –

5

Vous devez transmettre le nom de l'assemblée à Assembly.Load(), pas le nom de la DLL. Si vous ouvrez la DLL dans Reflector, le nom doit figurer en bas de la fenêtre. Dans le cas de PresentationCore.dll, le nom doit être quelque chose comme PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.

+2

+1 bon point - c'est le nom logique de l'assemblage - pas le nom de fichier physique - qui est nécessaire –

3

Je vous recommande de jeter un oeil à How the Runtime Locates Assemblies dans la bibliothèque MSDN pour avoir une idée de ce qui se passe lorsque le CLR tente de charger un assembly.

Pour diagnostiquer des problèmes spécifiques, l'outil Fusion Log Viewer est fantastique. Suzanne Cook, l'une des développeurs Fusion a un guide sur son blog qui m'a aidé dans le passé.

1

La meilleure façon d'obtenir la chaîne est d'abord ajouter une référence à votre projet, procédez comme suit:

string regStringMath = typeof(System.Math).Assembly; 
Assembly assMath = Assembly.Load("System.Math", regStringMath); 

string regStringPres = typeof(PresentationCore).Assembly; 
Assembly assPres = Assembly.Load("PresentationCore", regStringPres); 

Cela vous assurer d'obtenir la bonne version que vous avez ajouté comme référence à votre projet.

+0

haha, 'assMath' – Jonesopolis

Questions connexes