public static Assembly AssemblyResolve(object sender, ResolveEventArgs args) { AssemblyName requestedAssemblyName; try { requestedAssemblyName = new AssemblyName(args.Name); } catch (Exception ex) when(ex is ArgumentException || ex is FileLoadException) { return(null); } if (!ResourceEmbedderILInjected.IsLocalizedAssembly(requestedAssemblyName)) { return(null); } return(ResourceEmbedderILInjected.LoadFromResource(requestedAssemblyName, args.RequestingAssembly)); }
private static Assembly LoadFromResource(AssemblyName requestedAssemblyName, Assembly requestingAssembly) { if (requestedAssemblyName == null || requestedAssemblyName.CultureInfo == null) { return(null); } for (;;) { string arg = requestedAssemblyName.Name.Substring(0, requestedAssemblyName.Name.Length - ".resources".Length); string name = string.Format("{0}.{1}.resources.dll", arg, requestedAssemblyName.CultureInfo.Name); Assembly assembly = requestingAssembly ?? ResourceEmbedderILInjected.FindMainAssembly(requestedAssemblyName); if (assembly == null) { break; } using (Stream manifestResourceStream = assembly.GetManifestResourceStream(name)) { if (manifestResourceStream != null) { byte[] array = new byte[manifestResourceStream.Length]; manifestResourceStream.Read(array, 0, array.Length); return(Assembly.Load(array)); } } string name2 = requestedAssemblyName.CultureInfo.Parent.Name; if (string.IsNullOrEmpty(name2)) { goto Block_5; } requestedAssemblyName = new AssemblyName(requestedAssemblyName.FullName.Replace(string.Format("Culture={0}", requestedAssemblyName.CultureInfo.Name), string.Format("Culture={0}", name2))); } return(null); Block_5: return(null); }