我正在尝试在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()
加载并返回所有Referenced程序集。
以下是输出的屏幕截图:
[http://i.stack.imgur.com/sknC6.png]
为什么在AppDomain中扫描程序集后会加载System.Transactions?我应该如何优化我的代码?