与非Web应用程序等效的BuildManager.GetReferencedAssemblies

Ste*_*ven 13 asp.net asp.net-mvc wcf winforms asp.net-web-api

相比AppDomain.GetAssemblies(),BuildManager.GetReferencedAssemblies()(System.Web.Compilation.BuildManager)似乎是一种更可靠的方式来获得由在运行ASP.NET应用程序中引用的程序集,因为AppDomain.GetAssemblies()只得到"已经将组件已经被加载到此应用程序域的执行上下文".

迭代所有程序集是在DI容器中应用程序启动时动态注册类型的重要工具,特别是在应用程序启动期间,可能还有其他程序集未加载(不需要),组合根是第一个需要它们的人.因此,有一个可靠的方法来获取应用程序的引用程序集非常重要.

虽然BuildManager.GetReferencedAssemblies()对于ASP.NET应用程序来说是一种可靠的方法,但我想知道:有哪些替代方案可用于其他类型的应用程序,例如桌面应用程序,Windows服务和自托管WCF服务?

Ste*_*ven 11

我目前看到的唯一方法是手动预取所有引用的程序集,就像BuildManager下面的内容一样:

var assemblies =
    from file in Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory)
    where Path.GetExtension(file) == ".dll"
    select Assembly.LoadFrom(file);
Run Code Online (Sandbox Code Playgroud)