12
votes

Obtenez les chemins de tous les assemblages référencés

Comment puis-je obtenir les chemins de tous les assemblages référencés par l'assemblage en cours d'exécution? GetReferendedAssmies () me donne le nom nom de montage [] s. Comment puis-je aller où ils sont chargés de là?


3 commentaires

Essayez ceci Stackoverflow.com/questions / 1582510 / ...


Merci beaucoup. Cela résolu pour moi.


Pour un exemple de fonctionnement complet de la manière d'obtenir tous les assemblages référencés, de récursivement, voir Stackoverflow.com/questions/383686/... .


4 Réponses :


-1
votes

La propriété codebase doit fournir le nom complet du chemin.


1 commentaires

Malheureusement, CodeBase renvoie NULL sur chaque assemblage référencé. :-)



-1
votes

Vous pouvez obtenir l'emplacement de l'URL de l'assemblage comme celui-ci:

Assembly.GetExecutingAssembly().GetReferencedAssemblies()[0].CodeBase


1 commentaires

CodeBase retourne null. La solution est dans le message que Jasonevans lié à son commentaire au poste d'origine. En outre, Hans Passant a la bonne réponse aussi.



13
votes

Vous ne pouvez pas savoir que l'assemblage ne soit chargé. L'algorithme de résolution de montage est compliqué et vous ne pouvez pas deviner de manière fiable à l'avant de ce qu'il fera. Appeler le Assembly.load (AssemblyName) Le remplacement vous fera référence à l'Assemblée, et sa propriété de localisation vous indique ce dont vous avez besoin.

Cependant, vous vraiment ne voulez pas charger les assemblages à l'avance, avant le compilateur JIT le fait. Il est inefficace et la probabilité de problèmes n'est pas nulle. Vous pouvez par exemple tirer un AppDomain.assemblblyResolve avant que le programme ne soit prêt à y répondre. Évitez de poser cette question.


0 commentaires

4
votes

Après la réponse de Hans Passant, et depuis la propriété codebase toujours contenue null , je suis arrivé avec ceci. Cela pourrait ne pas trouver tous les assemblages car ils ne seraient peut-être pas tous déjà chargés. Dans ma situation, je devais retrouver toute référence d'un assemblage auparavant chargé, de sorte qu'il a bien fonctionné: xxx

utilisation: xxx


2 commentaires

Il serait bon d'éviter de renvoyer des valeurs nulles lorsque l'assemblage n'est pas chargé (continuez plutôt la boucle).


Bonne idée @slobodansavkovic, j'ai mis à jour ma réponse.