如何获取给定位置的装配列表?我试图反思appdomain,那就是给我带来的一切。我只想要执行程序集目录中的内容。
答案 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,允许您通过反射加载程序集以进行检查。