2

我正在尝试列出 AppDomain 中所有引用的程序集和程序集。每次我得到 25 个 ref.assemblies 之后 - AppDomain 中有 39 个程序集。但是,如果我再调用AppDomain.CurrentDomain.GetAssemblies()一次,我会再得到一个程序集——“System.Transactions”。因此,要列出所有程序集,我使用以下代码:

Console.WriteLine(GetRefAssemblies().Count());
foreach (Assembly asm in GetRefAssemblies())
{
    if (!asmList.Contains(asm)) asmList.Add(asm);
    foreach (Type t in asm.GetTypes())
    {
        if (!dict.ContainsKey(t) && t.GetConstructor(Type.EmptyTypes) != null)
        {
            dict.Add(t, t.GetConstructor(Type.EmptyTypes));
        }
    }
}
Console.WriteLine(AppDomain.CurrentDomain.GetAssemblies().Count());
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    if (!asmList.Contains(a)) asmList.Add(a);
    foreach (Type t in a.GetTypes())
    {
        if (!dict.ContainsKey(t) && t.GetConstructor(Type.EmptyTypes) != null)
        {
            dict.Add(t, t.GetConstructor(Type.EmptyTypes));
        }
    }
}
Console.WriteLine(AppDomain.CurrentDomain.GetAssemblies().Count());
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    if (!asmList.Contains(a)) Console.WriteLine(a.FullName);
    foreach (Type t in a.GetTypes())
    {
        if (!dict.ContainsKey(t) && t.IsClass && t.GetConstructor(Type.EmptyTypes) != null)
        {
            dict.Add(t, t.GetConstructor(Type.EmptyTypes));
        }
    }
}

其中GetRefAssemblies()加载并返回所有引用的程序集。这是输出的截图:[ http://i.stack.imgur.com/sknC6.png]

为什么在 AppDomain 中扫描程序集后加载 System.Transactions?我应该如何优化我的代码?

4

0 回答 0