Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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
        }