Je voudrais accéder aux informations de type d'un assemblage référencé (c'est une référence de projet). La difficulté consisterait à résoudre le chemin du fichier de l'assembly en utilisant la solution VS, et charger l'assembly à partir du fichier, mais je suis sûr que puisque l'assembly référencé est déjà résolu/chargé dans l'assembly en cours d'exécution, mais cette façon m'échappe vraiment. Comment puis-je faire ceci? Par exemple, dans MainAssembly
, je fais référence à LibAssembly
. Maintenant, dans le code MainAssembly
, j'ai besoin d'itérer les membres de types qui sont définis dans LibAssembly
.Comment puis-je obtenir des types d'un assemblage référencé?
Répondre
La façon la plus simple que je connaisse est d'utiliser la réflexion. Si vous avez une classe appelée MyClass
définie dans LibAssembly, à partir de votre assemblage principal, vous pouvez appeler le code comme le suivant:
Type[] types = Assembly.GetAssembly(typeof(MyClass)).GetTypes();
Cela vous obtenir tous les types au sein LibAssembly.
Modifier:
Si vous ne connaissez pas l'un des types au préalable et peut supposer que la bibliothèque serait dans le même endroit que l'exécutable, peut-être quelque chose le long des lignes suivantes fonctionnerait:
using System;
using System.IO;
using System.Reflection;
string libraryFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "myLib.dll");
Assembly assembly = Assembly.LoadFrom(libraryFileName);
Type[] myTypes = assembly.GetTypes();
pour obtenir une liste de toutes les assemblées chargées, vous pouvez essayer de demander au appdomain:
AppDomain MyDomain = AppDomain.CurrentDomain;
Assembly[] AssembliesLoaded = MyDomain.GetAssemblies();
foreach (Assembly MyAssembly in AssembliesLoaded)
{
//
}
Ensuite, vous pouvez parcourir tous les assemblages chargés et obtenir leurs types par réflexion.
Cette approche fonctionne, avec un problème: L'assemblage dont je dois extraire les types n'est pas chargé tant que j'instancie un type de cet assemblage. C'est en quelque sorte un Catch-22, parce que j'essaie de savoir quels types sont dans cet assemblage. – ProfK
- 1. Obtenir l'emplacement physique des types d'un assemblage
- 2. Comment extraire des types génériques d'un assemblage?
- 3. Comment obtenir des ressources de l'assembly référencé?
- 4. Comment le réflecteur affiche-t-il les types lorsque Assembly.GetTypes() échoue en raison d'un assemblage référencé manquant
- 5. Type C# défini dans un assemblage qui n'est pas référencé
- 6. types Importation de non assemblage référencés à l'aide
- 7. sérialisation binaire de types définis dans un assemblage silverlight
- 8. C# - Comment obtenir certains types génériques d'un assemblage en utilisant linq
- 9. Comment puis-je obtenir tous les types de fond dans un assemblage?
- 10. Comment puis-je obtenir tous les types de base dans un assemblage?
- 11. Comment obtenir les attributs sur un champ référencé
- 12. Supprimer MessageBox d'un assembly référencé
- 13. Conversion de types identiques de différentes versions du même assemblage
- 14. Obtenir la version d'exécution d'un assemblage Silverlight
- 15. Obtenir des types dans Win32 Dll
- 16. Utilisation d'un assemblage pour la création de scripts dans un modèle XSL référencé
- 17. Liste des classes d'un assemblage
- 18. Comment obtenir les types de contenu
- 19. CS0012: Le type « System.Web.Routing.RouteValueDictionary » est défini dans un assemblage non référencé
- 20. Assemblage "ADODB" manquant avec Mono?
- 21. . Assemblage de réseau résolvant la confusion
- 22. Extrait un assembly non référencé à partir du fichier xap
- 23. Assemblage et appels système
- 24. Ignorer l'analyse des types internes dans FxCop
- 25. Assemblage de colonnes à des lignes
- 26. Comment stocker des ensembles de contrôles dans un assemblage?
- 27. Comment intégrer des modules .NET dans un assemblage indépendant?
- 28. C# - Obtenir les types de champs
- 29. Comment est-ce "référencé avant affectation"?
- 30. Obtenir les types Collection de EntityFramework ObjectContext
'Type [] types = typeof (MyClass) .Assembly.GetTypes();' –
Mon problème est que je ne connais pas forcément un type dans LibAssembly. – ProfK
Ok, je vois, j'ai mis à jour ma réponse avec une solution possible. – nukefusion