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; }
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); }
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); } }
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; }