private static void ConfigureAssemblyResolution() {
// http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx
AppDomain.CurrentDomain.AssemblyResolve += (sender, iargs) => {
var assemblyName = new AssemblyName(iargs.Name);
// look in app domain
var loaded = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(a => a.FullName == assemblyName.FullName);
if (loaded != null) {
Trace("Loaded assembly {0} from existing AppDomain, {1}", assemblyName, loaded.Location);
return loaded;
}
// look in embedded resources
var resourceName = "Dashing.Console.lib." + assemblyName.Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
if (stream != null) {
Trace("Loaded assembly {0} from embedded resources", assemblyName);
var assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
// we couldn't find it, look on disk
var path = assemblyName.Name + ".dll";
if (File.Exists(path)) {
Trace("Loaded assembly {0} from disk", assemblyName);
var assemblyData = File.ReadAllBytes(path);
return Assembly.Load(assemblyData);
}
return null;
};
}