public static Type GetType(this IDotnetExpander expander, string assemblyName, string typeName) { return(Ex.Cache.Read("types", assemblyName ?? "", typeName ?? "", () => { if (string.IsNullOrWhiteSpace(typeName)) { return null; } assemblyName = assemblyName ?? ""; typeName = typeName ?? ""; Assembly assembly; Type type; if (!string.IsNullOrWhiteSpace(assemblyName)) { assembly = expander.GetAssembly(assemblyName); if (assembly != null) { type = assembly.GetType(typeName, false, true); if (type != null) { return type; } } } type = Type.GetType(typeName, false, true); if (type != null) { return type; } var pos = typeName.Length; while (true) { try { pos = typeName.LastIndexOf(".", pos - 1, StringComparison.Ordinal); if (pos < 1) { return null; } assemblyName = typeName.Substring(0, pos); assembly = expander.GetAssembly(assemblyName); if (assembly == null) { continue; } type = assembly.GetType(typeName); if (type != null) { return type; } var libraryName = assemblyName + (!assemblyName.EndsWith(".dll") ? ".dll" : string.Empty) + ", "; type = assembly.GetType(typeName.Replace(libraryName, string.Empty)); if (type != null) { return type; } } catch (Exception) { return null; } } })); }