using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace DefaultAppDomainApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("***** Fun with the default app domain *****\n");
InitDAD();
DisplayDADStats();
Console.WriteLine();
ListAllAssembliesInAppDomain();
Console.ReadLine();
}
#region Init the default app domain
private static void InitDAD()
{
// This logic will print out the name of any assembly
// loaded into the applicaion domain, after it has been
// created.
AppDomain defaultAD = AppDomain.CurrentDomain;
defaultAD.AssemblyLoad += (o, s) =>
{
Console.WriteLine("{0} has been loaded!", s.LoadedAssembly.GetName().Name);
};
}
#endregion
#region Display basic stats
private static void DisplayDADStats()
{
// Get access to the app domain for the current thread.
AppDomain defaultAD = AppDomain.CurrentDomain;
Console.WriteLine("Name of this domain: {0}", defaultAD.FriendlyName);
Console.WriteLine("ID of domain in this process: {0}", defaultAD.Id);
Console.WriteLine("Is this the default domain?: {0}", defaultAD.IsDefaultAppDomain());
Console.WriteLine("Base directory of this domain: {0}", defaultAD.BaseDirectory);
}
#endregion
#region List loaded assemblies
static void ListAllAssembliesInAppDomain()
{
// Get access to the app domain for the current thread.
AppDomain defaultAD = AppDomain.CurrentDomain;
// Now get all loaded assemblies in the default app domain.
var loadedAssemblies = from a in defaultAD.GetAssemblies() orderby a.GetName().Name select a;
Console.WriteLine("***** Here are the assemblies loaded in {0} *****\n",
defaultAD.FriendlyName);
foreach (var a in loadedAssemblies)
{
Console.WriteLine("-> Name: {0}", a.GetName().Name);
Console.WriteLine("-> Version: {0}\n", a.GetName().Version);
}
}
#endregion
}
}
上述代碼是由Andrew Troelsen從「Pro C#2010和.NET 4 Platform」一書中獲得的。 在這裏,當我運行這段代碼,控制永遠不會到達行AssemblyHoad事件未在AppDomain中觸發
defaultAD.AssemblyLoad += (o, s) =>
{
Console.WriteLine("{0} has been loaded!", s.LoadedAssembly.GetName().Name);
};
爲什麼當我運行該代碼不觸發此事件?當控制到達這裏時?
[docs](https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload(v = vs.110).aspx)在哪裏說的?至少現在的版本只是說「當程序集加載時發生。」 – 2017-09-14 12:41:50