我需要一個方法,它接受一個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