J'ai besoin d'une méthode qui accepte un Type et retourne les chemins de tous les assemblages utilisés dans le type. Je écrit ceci:Récupère les chemins des assemblages utilisés dans Type
public static IEnumerable<string> GetReferencesAssembliesPaths(this Type type)
{
yield return type.Assembly.Location;
foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies())
{
yield return Assembly.Load(assemblyName).Location;
}
}
En général, cette méthode de faire le travail, mais ont quelques inconvénients:
Je ne l'ai pas trouvé comment obtenir les ensembles référencés/types du type lui-même, de sorte J'ai utilisé type.Assembly.GetReferencedAssemblies() et obtenu les références de l'ensemble, pas seulement celles qui sont liées au type. Type.Assembly.GetReferencedAssemblies() renvoie AssemblyName et ne possède aucune propriété location/path/filepath. Pour obtenir la propriété location, j'ai d'abord utilisé Assembly.Load(), puis utilisé la propriété location. Je ne veux pas que les assemblys de chargement obtiennent leur chemin, car ils ne sont pas nécessairement utilisés, et parce que Assembly.Load() peut échouer avec FileNotFoundException ou BadImageFormatException.
Tous les types appartiennent à des assemblages - vous devriez pouvoir faire type.Assembly.GetReferencedAssemblies(). Oh attends, tu fais déjà ça. Je suppose que c'est résolu depuis longtemps, n'est-ce pas? 2011? –
@DxCK une solution à ce problème? Mon problème: Le projet Ma bibliothèque référence Oracle.DataAccess 4.112.2.0, mais en cours d'exécution, charge à partir de GAC Oracle.DataAccess 4.121.1.0. Assembly.GetReferencedAssemblies() me donne Oracle.DataAccess 4.112.2.0 pas Oracle.DataAccess 4.121.1.0. – Kiquenet
Pour l'utiliser, appelez 'var results = this.GetType(). GetReferencesAssembliesPaths();'. – Contango