c# – 获取Type中使用的程序集的路径

前端之家收集整理的这篇文章主要介绍了c# – 获取Type中使用的程序集的路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个方法,它接受一个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;
 }
}

通常这种方法可以完成这项工作,但也有一些缺点:

>我没有找到如何从类型本身获取引用的程序集/类型,所以我使用了type.Assembly.GetReferencedAssemblies()并获得了整个程序集的引用,而不仅仅是那些与类型相关的引用.
> type.Assembly.GetReferencedAssemblies()返回AssemblyName,没有位置/路径/文件路径属性.要获取location属性,我首先使用Assembly.Load()然后使用location属性.我不希望加载程序集获取它们的路径,因为它们没有必要使用,并且因为Assembly.Load()可能因FileNotFoundException或BadImageFormatException而失败.

解决方法

我想通过将其替换为Assembly.ReflectionOnlyLoad()解决了Assembly.Load()问题.

现在这是我的方法的样子:

public static IEnumerable<string> GetReferencesAssembliesPaths(this Type type)
{           
    yield return type.Assembly.Location;

    foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies())
    {
        yield return Assembly.ReflectionOnlyLoad(assemblyName.FullName).Location;
    }
}

现在唯一剩下的问题是type.Assembly.GetReferencedAssemblies(),我如何从类型而不是从程序集中获取引用的程序集?

猜你在找的C#相关文章