如何在Windows服务启动时跟踪程序集加载顺序?
例如。当我们启动服务时,它会加载所有引用程序集及其依赖项;我想要做的是在实际启动服务之前加载哪些程序集(OS,CLR等)。
答案 0 :(得分:2)
您可以在AssemblyLoad
上使用AppDomain.CurrentDomain
事件。
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
Assembly.Load("ICSharpCode.SharpZipLib");
Console.WriteLine("Completed loading");
/*
* This produced:
Loaded assembly C:\Documents and Settings\...\ConsoleApplication2\bin\Debug\ICSharpCode.SharpZipLib.dll
Completed loading
*/
}
static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
Console.WriteLine("Loaded assembly " + args.LoadedAssembly.Location);
}
请注意,这仅适用于从添加事件的位置加载的程序集。例如mscorlib
已在调用Main
之前加载,因为您需要它才能运行Main
。
当然,如果您自己创建域,则可以在域启动之前添加此事件,并且应该看到所有已加载的程序集。