2009-03-04 6 views
1

Comment obtenir une liste d'assemblages dans un emplacement donné? J'essaie de réfléchir sur le domaine, et cela me donne tout ce qui est chargé. Je veux juste ce qu'il y a dans le répertoire de l'assembly.Trouver des assemblées dans un répertoire

Répondre

1

La solution fournie par BtBh travaille pour trouver tous les fichiers avec extension .dll. Ricards remarque que seul le runtime .Net peut vous dire ce qu'est un assembly valide. Cela signifie que vous auriez à charger explicitement chaque fichier .dll trouvé pour vérifier s'il s'agit d'un assembly .Net valide (il pourrait s'agir simplement d'une ancienne DLL Windows). Comme mentionné par Josh il y a une méthode statique Assembly.ReflectionOnlyLoadFrom qui te permet de charger des assemblées pour l'inspection par l'intermédiaire de la réflexion.

5

Pour obtenir le chemin d'assemblage exécutant:

using System.IO; 

String path= Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location); 

Pour obtenir tous les ensembles:

DirectoryInfo di= new DirectoryInfo(path); 
FileInfo[] fis = di.GetFiles("*.dll"); 
foreach(FileInfo fis in fls) 
    //do something 
1

Vous pouvez obtenir une liste des fichiers en utilisant l'espace de noms System.IO. Regardez la classe Directory. Vous devez ensuite déterminer si le fichier est un assembly ou non. Vous pouvez inspecter le binaire à la recherche des métadonnées IL, mais cela n'est pas compris dans cette réponse.

Vous pouvez également essayer et il suffit de charger chaque fichier de réflexion uniquement à l'aide System.Reflection.Assembly.ReflectionOnlyLoadFrom().

1

Seulement en les chargeant, et en notant ceux qui échouent à charger. Cela laissera bien sûr ceux qui n'ont pas échoué chargés dans le domaine d'application actuel.

uniquement runtime .NET vous dira ce qui est un ensemble valide (et les ensembles ne doivent pas avoir un « .exe » ou « .dll » extension).

1

Pour obtenir toutes les assemblées chargées dans le domaine de l'application en cours, vous pouvez utiliser la méthode GetAssemblies:

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); 
+0

merci, mais cela m'apporte aussi les assemblages de frameworks. Je veux juste les locaux. – Steve

Questions connexes