Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.83 KB | None | 0 0
  1. using Ionic.Zip;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. namespace Comcast.ExtractPostProcessDllFromPackage
  10. {
  11. class Program
  12. {
  13. class Parameters
  14. {
  15. public string SourcePackageFilename { get; set; }
  16. public string TargetPackageFolder { get; set; }
  17. }
  18.  
  19. static void Main(string[] args)
  20. {
  21. try
  22. {
  23. Parameters parameters = GetParameters(args);
  24. string tempFolder = CreateTempFolder();
  25.  
  26. ExtractPacakgeZipFile(parameters, tempFolder);
  27. ExtractAndRemovePostProcessingDll(parameters, tempFolder);
  28. CreateNewUpdatePacakge(parameters, tempFolder);
  29. }
  30. catch (Exception ex)
  31. {
  32. Console.WriteLine(string.Format("Exception {0}({1}):\n{2}", ex.Message, ex.GetType().Name, ex.StackTrace));
  33.  
  34. Environment.Exit(100);
  35. }
  36. }
  37.  
  38. /// <summary>
  39. /// Creates the new update pacakge
  40. /// </summary>
  41. /// <param name="parameters"></param>
  42. /// <param name="tempFolder"></param>
  43. private static void CreateNewUpdatePacakge(Parameters parameters, string tempFolder)
  44. {
  45. string newUpdatePackageName = Path.Combine(parameters.TargetPackageFolder, Path.GetFileName(parameters.SourcePackageFilename));
  46. if (File.Exists(newUpdatePackageName))
  47. {
  48. File.Delete(newUpdatePackageName);
  49. }
  50.  
  51. Console.WriteLine("Creating package " + newUpdatePackageName);
  52.  
  53. using (ZipFile zf = new ZipFile(newUpdatePackageName))
  54. {
  55. zf.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
  56.  
  57. using (FileStream fs = File.Open(Path.Combine(tempFolder, "package.zip"), FileMode.Open, FileAccess.Read))
  58. {
  59. zf.AddEntry("package.zip", fs);
  60.  
  61. zf.Save();
  62. }
  63. }
  64. }
  65.  
  66. /// <summary>
  67. /// Extracts the PackageInstallPostProcessor.dll and removes to from the zip file
  68. /// </summary>
  69. /// <param name="parameters"></param>
  70. /// <param name="tempFolder"></param>
  71. private static void ExtractAndRemovePostProcessingDll(Parameters parameters, string tempFolder)
  72. {
  73. if (!Directory.Exists(parameters.TargetPackageFolder))
  74. {
  75. Directory.CreateDirectory(parameters.TargetPackageFolder);
  76. }
  77.  
  78. using (ZipFile zf = ZipFile.Read(Path.Combine(tempFolder, "package.zip")))
  79. {
  80. foreach (ZipEntry ze in zf)
  81. {
  82. if (ze.FileName == "addedfiles/bin/HedgehogDevelopment.SitecoreProject.PackageInstallPostProcessor.dll")
  83. {
  84. string dllPath = Path.Combine(parameters.TargetPackageFolder, "HedgehogDevelopment.SitecoreProject.PackageInstallPostProcessor.dll");
  85.  
  86. Console.WriteLine("Extracting file to " + dllPath);
  87. using (FileStream fs = File.Open(dllPath, FileMode.Create, FileAccess.Write))
  88. {
  89. ze.Extract(fs);
  90. }
  91. }
  92. }
  93.  
  94. Console.WriteLine("Removing post process dll");
  95. zf.RemoveEntries(new string[]
  96. {
  97. "addedfiles/bin/HedgehogDevelopment.SitecoreProject.PackageInstallPostProcessor.dll",
  98. "properties/addedfiles/bin/HedgehogDevelopment.SitecoreProject.PackageInstallPostProcessor.dll"
  99. });
  100.  
  101. zf.Save();
  102. }
  103. }
  104.  
  105. /// <summary>
  106. /// Extracts the Package.zip file
  107. /// </summary>
  108. /// <param name="parameters"></param>
  109. /// <param name="tempFolder"></param>
  110. private static void ExtractPacakgeZipFile(Parameters parameters, string tempFolder)
  111. {
  112. using (ZipFile zf = ZipFile.Read(parameters.SourcePackageFilename))
  113. {
  114. ZipEntry packageZipFile = (from ze in zf
  115. where ze.FileName == "package.zip"
  116. select ze).FirstOrDefault();
  117.  
  118. if (packageZipFile == null)
  119. {
  120. Console.WriteLine("Could not find package.zip in the update package");
  121. }
  122.  
  123. packageZipFile.Extract(tempFolder);
  124. }
  125. }
  126.  
  127. /// <summary>
  128. /// Creates the temp folder that holds the temp Package.zip file
  129. /// </summary>
  130. /// <returns></returns>
  131. private static string CreateTempFolder()
  132. {
  133. string tempFolder = Path.Combine(Path.GetTempPath(), "ExtractPostProcessDllFromPackage");
  134.  
  135. Console.WriteLine("Using temp folder " + tempFolder);
  136.  
  137. if (Directory.Exists(tempFolder))
  138. {
  139. Console.WriteLine("Cleaning temp folder");
  140.  
  141. Directory.Delete(tempFolder, true);
  142. }
  143.  
  144. Directory.CreateDirectory(tempFolder);
  145.  
  146. return tempFolder;
  147. }
  148.  
  149. /// <summary>
  150. /// Parses the loads the command line parameters
  151. /// </summary>
  152. /// <param name="args"></param>
  153. /// <returns></returns>
  154. private static Parameters GetParameters(string[] args)
  155. {
  156. if (args.Length != 2)
  157. {
  158. Console.WriteLine("Invalid Parameters\nParameters: [Path to Souce Package file] [Target Package Destination folder]");
  159.  
  160. Environment.Exit(0);
  161. }
  162.  
  163. return new Parameters
  164. {
  165. SourcePackageFilename = args[0],
  166. TargetPackageFolder = args[1]
  167. };
  168. }
  169. }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement