获得类型使用组件的路径(Get paths of assemblies used in Type)

2019-08-19 16:18发布

我需要采用一个类型,并返回,在类型中使用的所有组件的路径的方法。 我写了这个:

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和不具有位置/路径/文件路径属性。 要获得位置属性,我第一次使用Assembly.Load(),然后使用的位置属性。 我不想负载组件,以获得他们的路径,因为没有必要使用它们,因为Assembly.Load()可以用FileNotFoundException异常或BadImageFormatException失败。

Answer 1:

我想我被它替换到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(),我如何得到引用的程序从类型,而不是从组件?



Answer 2:

type.Assembly.GetReferencedAssemblies()将返回所有那些由其中的类型声明的组件所引用的组件。 这并不意味着你会使用此功能让组件有什么共同点与给定类型。



文章来源: Get paths of assemblies used in Type