C# Réflexion: Get *tous* les actifs assemblées dans une solution?
Voilà mon problème:
J'ai 2 projets commun " projets avec des actes comme une bibliothèque avec tous les types de code de support, et le programme qui utilise ledit projet dans nombre de ses appels. Nous allons appeler ces projets "Communs" et de "Programme". Ils sont tous les deux dans la même solution.
Dans les "Communes", j'ai une classe pour les commo réflexion tâches, comme la création d'une instance. Si je l'appelle GetExecutingAssembly, il devient tous les Types "Communs", cependant quand j'utilise GetEntryAssembly-je obtenir le "Programme" types.
Alors que je ne pourrais certainement modifier le code fonctionne avec 2 ensembles de l'asm, j'ai peur d'une situation où il y a plus de seulement 2 projets dans la solution - disons, 5 (je ne sais pas pourquoi, mais permet juste y aller pour l'instant), et j'ai peur que l'appel de GetExecutingAssembly et GetEntryAssembly ne pas obtenir tous les Types de l'ensemble du programme.
Est-il autre chose que je peux faire pour obtenir tous les Types dans un solution?
Vous devez vous connecter pour publier un commentaire.
Cela permettra d'obtenir tous les assemblys chargés dans le courant de l'AppDomain.
Comme indiqué dans les commentaires, il est possible d'engendrer de multiples domaines d'application, auquel cas chacun peut avoir ses propres assemblées. L'avantage immédiat de le faire, c'est que vous pouvez décharger les Assemblages par le déchargement de l'contenant AppDomain.
C'est un vraiment vieille question, mais pour l'avenir de référence ici est une mise en œuvre complète:
Assembly.Load
et similaires)?Aussi: Certains ensembles ne sont pas chargé tout de suite, donc vous devriez également mettre un Gestionnaire d'Événements sur le domaine d'application de montage de l'événement load.
Comment sur GetReferencedAssemblies à travailler en dehors de la AssemblyRef entrées de métadonnées? La "solution" n'est pas quelque chose que le CLR sait ou se soucie.. il traite dans les Assemblages.
Mises en garde:
1. Vous avez encore besoin de filtrer les assemblages Système.*
2. C'est un niveau de profondeur dans la ref de la chaîne d'.. mais peut être fait de manière récursive - avec plus de code.