Dashing.Console.Program.ConfigureAssemblyResolution C# (CSharp) Method

ConfigureAssemblyResolution() private static method

private static ConfigureAssemblyResolution ( ) : void
return void
        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;
            };
        }