服务启动时的DLL加载序列

时间:2010-11-11 07:07:45

标签: .net windows service

如何在Windows服务启动时跟踪程序集加载顺序?

例如。当我们启动服务时,它会加载所有引用程序集及其依赖项;我想要做的是在实际启动服务之前加载哪些程序集(OS,CLR等)。

1 个答案:

答案 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

当然,如果您自己创建域,则可以在域启动之前添加此事件,并且应该看到所有已加载的程序集。