protected virtual Assembly AssemblyResolver(AssemblyName assemblyName) { if (_assemblyCache.ContainsKey(assemblyName)) { return(_assemblyCache[assemblyName]); } Assembly actualAssembly = null; var assembly = Assembly.GetEntryAssembly(); if (assembly.GetName() == assemblyName) { actualAssembly = assembly; } if (actualAssembly == null) { assembly = Assembly.GetCallingAssembly(); if (assembly.GetName() == assemblyName) { actualAssembly = assembly; } } if (actualAssembly == null) { assembly = Assembly.GetExecutingAssembly(); if (assembly.GetName() == assemblyName) { actualAssembly = assembly; } } try { actualAssembly = Assembly.Load(assemblyName); } catch (System.IO.FileNotFoundException) { Assembly[] ais = AppDomain.CurrentDomain.GetAssemblies(); actualAssembly = ais.FirstOrDefault(a => a.GetName() == assemblyName); if (actualAssembly == null) { actualAssembly = ais.FirstOrDefault(a => a.GetName().Name == assemblyName.Name); } if (actualAssembly == null) { ThrowHelper.ThrowBinaryException_DeserializeCannotFindType(assemblyName.FullName); } } _assemblyCache[assemblyName] = actualAssembly; return(actualAssembly); }