System.Web.Compilation命名空间的BuildManager.GetReferencedAssemblies()?
据我所知,这是ASP.NET特定的,这就是为什么它不能在您的控制台应用程序工作。 (或者在Windows应用程序中)。
因此,第一个子问题是您是否需要BuildManager.GetReferencedAssemblies的特殊功能,即它通过探索并发现 - 除了ASP.NET参考组件的具体方式 - 不仅所有的组件,你的应用程序引用,但所有他们引用组件等,等
(见Difference between AppDomain.GetAssemblies and BuildManager.GetReferencedAssemblies)
如果你想什么要做的只是一个你的.exe直接引用的程序集列表(加上从那时起被动态加载的任何东西,无论是明确的代码还是隐含的itly通过调用引用的组件本身引用它们),最简单的方法就是这样的:
// Get all currently loaded assemblies.
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
如果不是,那就是它会变得复杂,你,因为没有一个简单的方法。 NET来获取应用程序间接引用的所有程序集列表。理论上,您可以编写代码,以递归方式在Assembly.GetReferencedAssemblies()上调用Assembly.GetReferencedAssemblies(),然后从所有结果中获得这些结果,然后从所有结果中获得 - 丢弃重复项,所以不要最终会陷入无限循环 - 最终会最终得到所有应用程序直接或间接静态引用的程序集。
(如果你曾经引用组件动态,通过AppDomain.Load()或一些这样说,这就不一一列举了。不过,我不相信BuildManager.GetReferencedAssemblies()会那样做。)
这不适合我,可能出于同样的原因,这个答案谈到: http://stackoverflow.com/a/2479400/178143 – Ted 2013-11-11 14:36:01