在目录中查找程序集

时间:2009-03-04 17:27:53

标签: c# reflection

如何获取给定位置的装配列表?我试图反思appdomain,那就是给我带来的一切。我只想要执行程序集目录中的内容。

5 个答案:

答案 0 :(得分:5)

获取正在执行的程序集路径:

using System.IO;

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

获取所有程序集:

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

答案 1 :(得分:1)

您可以使用System.IO命名空间获取文件列表。查看Directory类。然后,您需要确定该文件是否为程序集。您可以检查二进制文件以查找IL元数据,但这超出了此答案的范围。

您也可以尝试仅使用System.Reflection.Assembly.ReflectionOnlyLoadFrom()加载每个文件以进行反射。

答案 2 :(得分:1)

仅加载它们,并注意哪些加载失败。这当然会留下当前app-domain中未加载失败的那些。

只有.NET运行时会告诉您什么是有效的程序集(并且程序集不必具有“.exe”或“.dll”扩展名)。

答案 3 :(得分:1)

要获取当前应用领域中加载的所有程序集,您可以使用GetAssemblies方法:

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

答案 4 :(得分:1)

BtBh提供的解决方案可以查找扩展名为.dll的所有文件。 Ricards说明只有.Net运行时可以告诉你什么是有效程序集。这意味着您必须显式加载发现的每个.dll文件,以检查它是否是有效的.Net程序集(它可能只是一个普通的旧Windows dll)。如Josh所述,有一个静态方法Assembly.ReflectionOnlyLoadFrom,允许您通过反射加载程序集以进行检查。