服务启动时的DLL加载顺序

3

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

例如,当我们启动一个服务时,它会加载所有引用程序集及其依赖项;我想知道的是,在实际启动服务之前加载了哪些程序集(操作系统、CLR或其他)。

1个回答

2
您可以使用AppDomain.CurrentDomain上的AssemblyLoad事件来实现这一点。
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
当然,如果您自己创建域,可以在启动域之前添加此事件,这样您就应该看到所有已加载的程序集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接