예제 #1
0
        public ResourceSetCollection ExtractResources()
        {
            ResourceSetCollection result = new ResourceSetCollection();

            if (ReferenceEquals(_assembly, null))
            {
                return result;
            }

            result = new WinRes().EnumStringResources(_assembly.Location) ?? // read resources from Win32 DLL.
                     AssemblyResourceUtility.ExtractResources(_assembly);    // read resources from managed assembly.

            return result;
        }
예제 #2
0
        private void Save(string path, AssemblyName assemblyName, ResourceSetCollection resourceSetCollection)
        {
            string assemblyFileName = AssemblyResourceUtility.CreateLocalAssemblyFileName(path, assemblyName);

            path = Path.GetDirectoryName(assemblyFileName);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            if (File.Exists(assemblyFileName))
            {
                File.Delete(assemblyFileName);
            }

            AssemblyResourceSaver assemblyResourceSaver = AssemblyResourceSaver.CreateInNewDomain(assemblyName, assemblyFileName);
            assemblyResourceSaver.CreateAssembly(resourceSetCollection);
            AssemblyResourceSaver.DestroyDomain(assemblyResourceSaver);
        }
예제 #3
0
파일: WinRes.cs 프로젝트: LogoFX/LogoFX
        public ResourceSetCollection EnumStringResources(string libraryFileName)
        {
            IntPtr hMod = LoadLibraryEx(libraryFileName, IntPtr.Zero, LOAD_LIBRARY_AS_DATAFILE);

            _cache = new ResourceSetCollection();

            try
            {
                if (!EnumResourceNamesWithID(hMod, RT_STRING, EnumRes, IntPtr.Zero))
                {
                    //throw new Win32Exception();
                    _cache = null;
                }

                return _cache;
            }

            finally
            {
                _cache = null;
                FreeLibrary(hMod);
            }
        }
예제 #4
0
        public static ResourceSetCollection ExtractResources(Assembly assembly)
        {
            ResourceSetCollection result = new ResourceSetCollection();

            //search all resource names
            string[] resourceNames = assembly.GetManifestResourceNames()
                .Where(x => x.ToLower().EndsWith(ExtensionPart))
                .ToArray();

            //iterate on resources
            foreach (string resourceName in resourceNames)
            {
                //try gets resource stream by it's name
                Stream stream = assembly.GetManifestResourceStream(resourceName);

                if (ReferenceEquals(stream, null))
                {
                    continue;
                }

                ResourceCollection resource = new ResourceCollection();

                //trying found resource
                try
                {
                    using (ResourceReader rr = new ResourceReader(stream))
                    {
                        foreach (DictionaryEntry entry in rr)
                        {
                            if (entry.Key is string && entry.Value is string)
                            {
                                resource.Add((string)entry.Key, (string)entry.Value);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }

                catch (Exception)
                {
                    continue;
                }

                if (resource.Count > 0)
                {
                    result.Add(resourceName, resource);
                }
            }

            return result;
        }