我需要一个方法,它接受一个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/path/filepath属性。要获得位置属性,我首先使用Assembly.Load(),然后使用位置属性。我不想加载程序集来获取它们的路径,因为它们没有必要使用,并且因为Assembly.Load()可能会因FileNotFoundException或BadImageFormatException而失败。
所有类型都属于程序集 - 你应该只能做type.Assembly.GetReferencedAssemblies()。哦,等等,你已经这么做了。我假设无论如何这已经很久了,对吧? 2011? – 2013-04-10 19:42:32
@DxCK有关该问题的任何解决方案?我的问题:我的库项目引用Oracle.DataAccess 4.112.2.0,但在执行时,从GAC加载Oracle.DataAccess 4.121.1.0。 Assembly.GetReferencedAssemblies()给我Oracle.DataAccess 4.112.2.0不是Oracle.DataAccess 4.121.1.0。 – Kiquenet 2014-03-28 11:02:29
要使用,请调用'var results = this.GetType()。GetReferencesAssembliesPaths();'。 – Contango 2014-10-10 11:12:23