我建议您在适当的时候将模块和类型从加载的程序集转储到日志文件。然后你可以寻找神秘的组件并找到其中的类型。例如:
using System;
using System.Xml.Linq;
public class Test
{
static void Main()
{
Console.WriteLine("Before");
DumpAssemblies();
DoSomethingWithXml();
Console.WriteLine("After");
DumpAssemblies();
}
static void DoSomethingWithXml()
{
new XDocument();
}
static void DumpAssemblies()
{
Console.WriteLine("Assemblies loaded:");
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(" Assembly {0}:", assembly.FullName);
foreach (var module in assembly.GetModules())
{
Console.WriteLine(" Module {0}:", module.Name);
foreach (var type in module.GetTypes())
{
Console.WriteLine(" {0}", type.FullName);
}
}
}
}
}
一旦您知道哪些类型是在哪个程序集中,就应该解释发生了什么。如果您看到的神秘模块没有任何类型,或者没有太多意义的类型,那么您需要添加更多的诊断——例如,在模块中列出资源,或者在类型中列出方法等。