private static Stream SearchResourceInAssembly(string key, Object obj) { Stream istr = null; try { if (obj is Assembly) { istr = ((Assembly)obj).GetManifestResourceStream(key); if (istr != null) { return(istr); } } else if (obj is string) { string dir = (string)obj; try { #if !NETSTANDARD1_6 istr = Assembly.LoadFrom(dir).GetManifestResourceStream(key); #else istr = AssemblyLoadContextUtil.LoadFromDefaultContextAssemblyPath(key).GetManifestResourceStream(key); #endif } catch { } if (istr != null) { return(istr); } string modkey = key.Replace('.', '/'); string fullPath = Path.Combine(dir, modkey); if (File.Exists(fullPath)) { return(new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read)); } int idx = modkey.LastIndexOf('/'); if (idx >= 0) { modkey = modkey.Substring(0, idx) + "." + modkey.Substring(idx + 1); fullPath = Path.Combine(dir, modkey); if (File.Exists(fullPath)) { return(new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read)); } } } } catch { } return(istr); }
private static void LoadITextResourceAssemblies() { #if !NETSTANDARD1_6 var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic).ToList(); List <string> loadedPaths = new List <string>(); foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { try { var path = a.Location; loadedPaths.Add(path); } catch { // to skip exceptions for dynamically loaded assemblies without location // such as anonymously hosted dynamicmethods assembly for example } } var referencedPaths = Directory.GetFiles(FileUtil.GetBaseDirectory(), "*.dll"); var toLoad = referencedPaths.Where(referencePath => !loadedPaths.Any(loadedPath => loadedPath.Equals(referencePath, StringComparison.OrdinalIgnoreCase))).ToList(); foreach (String path in toLoad) { try { AssemblyName name = AssemblyName.GetAssemblyName(path); if (iTextResourceAssemblyNames.Contains(name.Name) && !loadedAssemblies.Any(assembly => assembly.GetName().Name.Equals(name.Name))) { loadedAssemblies.Add(AppDomain.CurrentDomain.Load(name)); } } catch { } } #else string runtimeId = RuntimeEnvironment.GetRuntimeIdentifier(); List <AssemblyName> loadedAssemblies = null; try { loadedAssemblies = DependencyContext.Default?.GetRuntimeAssemblyNames(runtimeId).ToList(); } catch { } if (loadedAssemblies == null) { loadedAssemblies = new List <AssemblyName>(); } if (FileUtil.GetBaseDirectory() != null) { var referencedPaths = Directory.GetFiles(FileUtil.GetBaseDirectory(), "*.dll"); foreach (String path in referencedPaths) { try { AssemblyName name = AssemblyLoadContextUtil.GetAssemblyName(path); if (iTextResourceAssemblyNames.Contains(name.Name) && !loadedAssemblies.Any(assembly => assembly.Name.Equals(name.Name))) { Assembly newAssembly = AssemblyLoadContextUtil.LoadFromDefaultContextAssemblyPath(path); loadedAssemblies.Add(newAssembly.GetName()); } } catch { } } } #endif }