J'ai un peu de code qui boucle sur les types actuellement chargés dans un AppDomain qui s'exécute dans une application ASP.NET. Voilà comment je reçois les assemblées:Pourquoi certains assemblys .Net ne sont-ils pas disponibles via la méthode GetAssemblies() d'AppDomain?
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Lorsque la première application démarre il n'y a pas de problème et tous les types que j'attends sont présents. Mais lorsque je mets à jour Web.config ou que je mets fin au processus w3p.exe (ou que le processus est recyclé pour une raison quelconque), seuls certains des types que j'attends sont disponibles. Lorsque je parcours un débogueur, je remarque que certains assemblys du chemin de recherche privé (le répertoire bin de mon application) n'ont pas été chargés. Je supposais que tous les assemblages étaient chargés au démarrage de l'application et redémarraient, qu'ils soient immédiatement requis ou non. Mais dans le cas du redémarrage, cela ne semble pas se produire sauf si ces fichiers d'assemblage ont été mis à jour.
Ce dont j'ai besoin, c'est de collecter des informations de type au démarrage pour les utiliser plus tard. Mais puisque pendant un redémarrage, les types ne sont pas disponibles, cela provoque des ravages plus tard quand l'information de type doit être utilisée. Donc, dans cet esprit, comment puis-je résoudre ou contourner cette lacune?
Je pensais à charger explicitement les assemblages. J'ai seulement besoin des assemblées privées jusqu'ici pour que je puisse juste charger tout du chemin de recherche privé. Je ne suis pas sûr de savoir quelle est la meilleure façon d'y parvenir. Assembly.Load? Assembly.LoadFile? Assembly.LoadFrom? –
Assembly.Load en général est l'approche préférée, car il est le plus proche du mécanisme de chargement normal. Voir http://blogs.msdn.com/suzcook/archive/2003/05/29/57143.aspx pour les avantages et les inconvénients, et http://blogs.msdn.com/suzcook/archive/2003/09/19/ 57248.aspx pour un peu plus d'infos. –
Merci pour les liens, j'ai déjà regardé ceux-ci. Je pense que je devrais utiliser LoadFrom ou LoadFile puisque je n'ai que des chemins de fichiers avec lesquels travailler. Je sais que j'ai utilisé LoadFile avant de rencontrer des problèmes lors de la mise à jour des assemblages lors d'un déploiement en raison du verrouillage des fichiers d'assemblage, vraisemblablement par LoadFile. Je pense que LoadFrom est bon pour moi mais je ne suis pas sûr de comprendre complètement ses implications. –