[英]Get the paths of all referenced assemblies
如何獲取當前正在執行的程序集引用的所有程序集的路徑? GetReferencedAssmblies()
為我提供了AssemblyName[]
。 我如何從那里到達它們的裝載位置?
在裝配程序之前,您無法知道。 裝配分辨率算法很復雜,您無法可靠地預測它將做什么。 調用Assembly.Load(AssemblyName)
覆蓋將為您提供對程序集的引用,其Location屬性將告訴您所需的內容。
但是,您真的不希望在JIT編譯器執行之前預先加載程序集。 這是低效的,問題的可能性不是零。 例如,您可以在程序准備好響應之前觸發AppDomain.AssemblyResolve
事件。 避免問這個問題。
按照Hans Passant的回答,由於CodeBase
屬性總是包含null
,我想出了這個。 它可能找不到所有程序集,因為它們可能並非都已加載。 在我的情況下,我必須找到以前加載的程序集的所有引用,所以它運行良好:
IEnumerable<string> GetAssemblyFiles(Assembly assembly)
{
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
return assembly.GetReferencedAssemblies()
.Select(name => loadedAssemblies.SingleOrDefault(a => a.FullName == name.FullName)?.Location)
.Where(l => l != null);
}
用法:
var assemblyFiles = GetAssemblyFiles(typeof(MyClass).Assembly);
CodeBase
屬性應提供完整路徑名。
您可以像這樣獲取程序集的URL位置:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()[0].CodeBase
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.