EmbeddedResourceSet.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.Collections.Generic;
  2. using System.Reflection;
  3. using Abp.Extensions;
  4. using Abp.IO.Extensions;
  5. namespace Abp.Resources.Embedded
  6. {
  7. public class EmbeddedResourceSet
  8. {
  9. public string RootPath { get; }
  10. public Assembly Assembly { get; }
  11. public string ResourceNamespace { get; }
  12. public EmbeddedResourceSet(string rootPath, Assembly assembly, string resourceNamespace)
  13. {
  14. RootPath = rootPath.EnsureEndsWith('/');
  15. Assembly = assembly;
  16. ResourceNamespace = resourceNamespace;
  17. }
  18. internal void AddResources(Dictionary<string, EmbeddedResourceItem> resources)
  19. {
  20. foreach (var resourceName in Assembly.GetManifestResourceNames())
  21. {
  22. if (!resourceName.StartsWith(ResourceNamespace))
  23. {
  24. continue;
  25. }
  26. using (var stream = Assembly.GetManifestResourceStream(resourceName))
  27. {
  28. var relativePath = ConvertToRelativePath(resourceName);
  29. var filePath = EmbeddedResourcePathHelper.NormalizePath(RootPath) + relativePath;
  30. resources[filePath] = new EmbeddedResourceItem(
  31. filePath,
  32. stream.GetAllBytes(),
  33. Assembly
  34. );
  35. }
  36. }
  37. }
  38. private string ConvertToRelativePath(string resourceName)
  39. {
  40. return resourceName.Substring(ResourceNamespace.Length + 1);
  41. }
  42. }
  43. }