我们如何跟踪Windows服务启动时的程序集加载顺序?
例如。 当我们启动一个服务时,它会加载所有的引用程序集及其依赖关系; 我想要做的是在实际启动服务之前正在加载哪个程序集(OS,CLR等)。
您可以在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
。
当然,如果您自己创建域,则可以在域启动之前添加此事件,并且您应该看到所有加载的程序集。