public Assembly FindAssemblies(object sender, ResolveEventArgs args) { // If a linkable component loads additional assemblies OmiEd might // have issues resolving them // This will help by guessing that the additional assembly might be // in the same folder as the linkable component assembly and trying that. // Not guarantied to work but definitely does help in some cases. var name = new AssemblyName(args.Name).Name; if (name.EndsWith(".resources") || name.StartsWith("System.") || name.EndsWith(".XmlSerializers")) { // don't clutter session log with these return null; } Assembly assembly; string file; FileInfo fi; var sb = new StringBuilder(); bool loaded = false; try { sb.Append(string.Format("AssemblyLoader({0}).FindAssemblies({1})", _caption, name)); if (_loaded.TryGetValue(name, out assembly)) { sb.AppendLine(); sb.AppendLine(string.Format("\tPreviously loaded as({0})", assembly.EscapedCodeBase)); return assembly; } if (args.RequestingAssembly != null) { var uri = Utilities.AssemblyUri(args.RequestingAssembly); AddSearchUri(uri); } var folderpath = string.Empty; foreach (string extension in _potentialAssemblyExtensions) { file = name; if (!file.EndsWith(extension)) file = name + extension; foreach (var uri in _uris) { if (!Utilities.UriIsExistingFolderPath(uri, out folderpath)) continue; fi = new FileInfo(Path.Combine(folderpath, file)); if (!fi.Exists) continue; sb.AppendLine(); sb.Append(string.Format("\tLoadFrom({0})", fi.FullName)); assembly = Assembly.LoadFrom(fi.FullName); if (assembly != null) { loaded = true; _loaded.Add(name, assembly); return assembly; } } } return null; } finally { if (args.RequestingAssembly != null) sb.AppendFormat("\t\tRequestingAssembly\r\n\t\t\t{0}\r\n\t\t\t{1}\r\n", args.RequestingAssembly.FullName, args.RequestingAssembly.CodeBase); if (loaded) Trace.TraceInformation(sb.ToString()); else { sb.Append(", unfound"); Trace.TraceWarning(sb.ToString()); } } }
private Assembly HandlerImpl(object sender, ResolveEventArgs args) { if (_ignore) return null; var id = new AssemblyName(args.Name).Name; Assembly result; if (_cached.TryGetValue(id, out result)) return result; if (string.Equals(id, "System.Web", StringComparison.OrdinalIgnoreCase)) { if (MessageBox.Show("Looks like you don’t have .NET 4.5.2 installed. Would you like to install it?", "Error", MessageBoxButton.YesNo, MessageBoxImage.Asterisk) == MessageBoxResult.Yes) { Process.Start("http://www.microsoft.com/en-us/download/details.aspx?id=42642"); } Environment.Exit(10); } #if LOCALIZABLE if (name == "Content Manager.resources" && _first) { Log(">> Content Manager.resources <<"); return null; } if (name.EndsWith(".resources")) { var culture = splitted.ElementAtOrDefault(2)?.Split(new[] { "Culture=" }, StringSplitOptions.None).ElementAtOrDefault(1); Log("culture: " + culture); if (culture == "neutral") return null; var resourceId = CultureInfo.CurrentUICulture.IetfLanguageTag; if (!string.Equals(resourceId, "en-US", StringComparison.OrdinalIgnoreCase)) { name = name.Replace(".resources", "." + resourceId); Log("localized: " + name); } else { Log("skip: " + args.Name); return null; } } #else if (id.StartsWith("PresentationFramework") || id.EndsWith(".resources")) return null; #endif if (id == "Magick.NET-x86") return null; if (_logFilename != null) { Log("Resolve: " + args.Name + " as " + id); } try { _ignore = true; result = Extract(id); if (OptionCache) { _cached[id] = result; } return result; } finally { _ignore = false; } }