【发布时间】:2009-10-17 15:55:06
【问题描述】:
我需要一个方法,它接受一个类型并返回该类型中使用的所有程序集的路径。 我是这样写的:
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;
}
}
通常这种方法可以完成这项工作,但也有一些缺点:
我没有找到如何从类型本身获取引用的程序集/类型,所以我使用了 type.Assembly.GetReferencedAssemblies() 并获取了整个程序集的引用,而不仅仅是那些与输入。
type.Assembly.GetReferencedAssemblies() 返回 AssemblyName 并且没有位置/路径/文件路径属性。为了获得 location 属性,我首先使用了 Assembly.Load() ,然后使用了 location 属性。我不希望加载程序集获取它们的路径,因为它们没有必要使用,并且因为 Assembly.Load() 可能会因 FileNotFoundException 或 BadImageFormatException 而失败。
【问题讨论】:
标签: c# .net reflection assemblies reference