Estrazione delle embedded resources su file system
Per la realizzazione di un progetto ho incluso come embedded resources diversi file (report, immagini, xml, etc...) in modo da semplificare il deploy. Per lasciare comunque la possibilità di customizzare l'installazione ho creato questa classe helper che permette di fare il dump della risorsa embedded su file system. Il codice che accede alla risorsa chiama sempre la EnsureFileSystemCopy poi accede tramite file system. In questo modo chi installa / assiste ha libertà di azione.
In caso di "disastro" basta svuotare la cartella di dump delle risorse per tornare alla situazione originale.
| 1. | using System; |
| 2. | using System.IO; |
| 3. | using System.Reflection; |
| 4. | |
| 5. | namespace Prxm.Pass.Framework.Helpers |
| 6. | { |
| 7. | public static class EmbeddedResourcesHelper |
| 8. | { |
| 9. | public static void EnsureFileSystemCopy(Assembly assembly, string resourceName, string filename) |
| 10. | { |
| 11. | if (File.Exists(filename)) |
| 12. | return; |
| 13. | |
| 14. | string folder = Path.GetDirectoryName(filename); |
| 15. | if (!Directory.Exists(folder)) |
| 16. | Directory.CreateDirectory(folder); |
| 17. | |
| 18. | using (var stream = assembly.GetManifestResourceStream(resourceName)) |
| 19. | { |
| 20. | if (null == stream) |
| 21. | throw new Exception(string.Format("Cannot find resource {0} in assembly {1}", resourceName, |
| 22. | assembly.FullName)); |
| 23. | |
| 24. | using (var reader = new BinaryReader(stream)) |
| 25. | { |
| 26. | using (var writer = new BinaryWriter(File.Create(filename))) |
| 27. | { |
| 28. | byte[] buffer; |
| 29. | while((buffer = reader.ReadBytes(1024)).Length > 0) |
| 30. | writer.Write(buffer); |
| 31. | |
| 32. | writer.Flush(); |
| 33. | } |
| 34. | } |
| 35. | } |
| 36. | } |
| 37. | } |
| 38. | } |
| 39. | |