Asp.net
BuildManager.GetReferencedAssemblies 等效於非 Web 應用程序
與 相比
AppDomain.GetAssemblies(),BuildManager.GetReferencedAssemblies()( System.Web.Compilation.BuildManager ) 似乎是一種更可靠的方式來獲取 ASP.NET 應用程序在執行時引用的程序集,因為AppDomain.GetAssemblies()只獲取“已經載入到的程序集”此應用程序域的執行上下文”。遍歷所有程序集是在應用程序啟動時在 DI 容器中動態註冊類型的重要工具,尤其是在應用程序啟動期間,可能還沒有載入其他程序集(在不需要的地方),組合根是第一個需要它們的人。因此,有一個可靠的方法來獲取應用程序的引用程序集是非常重要的。
雖然
BuildManager.GetReferencedAssemblies()對於 ASP.NET 應用程序來說是一種可靠的方法,但我想知道:對於其他類型的應用程序,例如桌面應用程序、Windows 服務和自託管 WCF 服務,還有哪些替代方案可用?
我目前看到的唯一方法是手動預取所有引用的程序集,就像幕後
BuildManager所做的那樣:var assemblies = from file in Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory) where Path.GetExtension(file) == ".dll" select Assembly.LoadFrom(file);
我有同樣的問題。在做了一些研究之後,我仍然沒有找到一個可靠的答案。我想出的最好的方法就是
AppDomain.CurrentDomain.GetAssemblies()與AppDomain.AssemblyLoad事件相結合。通過這種方式,我可以處理所有已載入的程序集,同時獲得所有新程序集的通知(然後我會對其進行掃描)。