簡體   English   中英

為什么有些.Net程序集不能通過AppDomain的GetAssemblies()方法獲得?

[英]Why are some .Net assemblies not available via an AppDomain's GetAssemblies() method?

我有一些代碼循環通過當前加載到在ASP.NET應用程序中運行的AppDomain的類型。 以下是我獲取程序集的方法:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

當應用程序首次啟動時,沒有問題,我期望的所有類型都存在。 但是當我更新Web.config或殺死w3p.exe進程(或者進程因任何原因而被回收)時,只有一些我期望的類型可用。 當我使用調試器時,我注意到私有搜索路徑(我的應用程序的bin目錄)中的某些程序集尚未加載。 我假設所有程序集都在應用程序啟動時加載並重新啟動,無論它們是否立即需要。 但是在重新啟動的情況下, 除非已更新這些程序集文件, 否則似乎不會發生這種情況。

我需要的是在啟動時收集類型信息以供日后使用。 但是,由於在重新啟動期間類型不可用,因此在需要使用類型信息時會嚴重破壞。 那么考慮到這一點我該如何解決或解決這個缺陷呢?

程序集是按需加載的,因此您可能尚未使用這些程序集中包含的任何類型。

您可以使用

AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();

這樣,您將獲得從您調用這些方法的程序集中引用的所有程序集。

作為啟動的一部分,您可以明確加載您關心的程序集嗎?

你必須提前知道你需要哪些組件。

掃描文件系統以找出隨應用程序一起發布的程序集可能是一個有用的想法,但它對GAC加載的程序集沒有幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM