1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
public static class AssemblyLocator
{
static Dictionary<string, Assembly> assemblies;
static Dictionary<string, Assembly> softassemblies;
public static void Init()
{
assemblies = new Dictionary<string, Assembly>();
softassemblies = new Dictionary<string, Assembly>();
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly assembly = null;
assemblies.TryGetValue(args.Name, out assembly);
if (assembly == null)
{
try
{
AssemblyName name = new AssemblyName(args.Name);
softassemblies.TryGetValue(name.Name.ToLower(), out assembly);
}
catch { }
}
return assembly;
}
static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
Assembly assembly = args.LoadedAssembly;
assemblies[assembly.FullName] = assembly;
softassemblies[assembly.GetName().Name.ToLower()] = assembly;
}
} |