这就是我的问题:
我有两个项目-一个‘公共’项目的行为类似于一个库与各种支持代码,以及实际的程序,使用该项目的许多调用。我们将这些项目称为“公共”和“程序”。它们都在同一个解决方案中。
在" common“中,我有一个用于常见反射任务的类,比如创建一个实例。如果我调用GetExecutingAssembly,它会得到所有的“通用”类型,但是当我使用GetEntryAssembly时,我会得到“程序”类型。
虽然我当然可以编辑代码来使用2组asm,但我担心解决方案中有超过2个项目的情况-假设有5个(不知道为什么,但让我们暂时转到那里),并且我担心调用GetExecutingAssembly和GetEntryAssembly不会获得整个程序中的所有类型。
我还能做些什么来获取解决方案中的所有类型吗
发布于 2009-05-12 05:35:56
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
这将获取当前AppDomain中所有已加载的程序集。
正如注释中所指出的,可以派生多个AppDomains,在这种情况下,每个都可以有自己的程序集。这样做的直接好处是,您可以通过卸载包含的AppDomain来卸载程序集。
发布于 2012-04-21 05:14:46
这是一个非常老的问题,但为了将来参考,这里有一个完整的实现:
public static IEnumerable<Assembly> GetAssemblies()
{
var list = new List<string>();
var stack = new Stack<Assembly>();
stack.Push(Assembly.GetEntryAssembly());
do
{
var asm = stack.Pop();
yield return asm;
foreach (var reference in asm.GetReferencedAssemblies())
if (!list.Contains(reference.FullName))
{
stack.Push(Assembly.Load(reference));
list.Add(reference.FullName);
}
}
while (stack.Count > 0);
}
发布于 2009-05-12 05:57:23
另外:有些程序集不是立即加载的,因此您还应该在AppDomain的程序集load事件上放置一个事件处理程序。
AppDomain.CurrentDomain.AssemblyLoad += ....
https://stackoverflow.com/questions/851248
复制相似问题