AssemblyUpdater.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Xml;
  6. namespace VersionTool
  7. {
  8. public class AssemblyUpdater
  9. {
  10. public static void UpdateVersion(string folder, string version)
  11. {
  12. try
  13. {
  14. // var files = Directory.GetFiles(folder, "AssemblyInfo.cs", SearchOption.AllDirectories).Where(x => x.Contains("Properties")).ToArray();
  15. // foreach (var file in files)
  16. // {
  17. // if (File.Exists(file))
  18. // {
  19. // var sb = new StringBuilder();
  20. // string text;
  21. // using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read))
  22. // {
  23. // using (var sr = new StreamReader(fs))
  24. // {
  25. // string s;
  26. // while ((s = sr.ReadLine()) != null)
  27. // {
  28. // if (s.Contains("assembly: AssemblyVersion"))
  29. // {
  30. // s = Utility.GetStr(s, version);
  31. // }
  32. // if (s.Contains("assembly: AssemblyFileVersion"))
  33. // {
  34. // s = Utility.GetStr(s, version);
  35. // }
  36. // if (s.Contains("assembly: AssemblyDescription"))
  37. // {
  38. // s = Utility.GetStr(s, "Powered by VINNO");
  39. // }
  40. // if (s.Contains("assembly: AssemblyCompany"))
  41. // {
  42. // s = Utility.GetStr(s, "VINNO Technology (Suzhou) Co. Ltd.");
  43. // }
  44. // if (s.Contains("assembly: AssemblyProduct"))
  45. // {
  46. // s = Utility.GetStr(s, "VINNO vCloud System");
  47. // }
  48. // if (s.Contains("assembly: AssemblyCopyright"))
  49. // {
  50. // s = Utility.GetStr(s, "Copyright © VINNO 2018");
  51. // }
  52. // if (s.Contains("assembly: AssemblyTrademark"))
  53. // {
  54. // s = Utility.GetStr(s, "VINNO");
  55. // }
  56. // sb.AppendLine(s);
  57. // }
  58. // text = sb.ToString();
  59. // }
  60. // }
  61. // using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write))
  62. // {
  63. // using (var sw = new StreamWriter(fs, Encoding.UTF8))
  64. // {
  65. // sw.Write(text);
  66. // }
  67. // }
  68. // }
  69. // }
  70. // files = Directory.GetFiles(folder, "Info.plist", SearchOption.AllDirectories);
  71. // foreach (var file in files)
  72. // {
  73. // try
  74. // {
  75. // if (File.Exists(file))
  76. // {
  77. // //XML
  78. // var document = new XmlDocument();
  79. // document.Load(file);
  80. // var root = document.SelectSingleNode("plist");
  81. // if (root != null)
  82. // {
  83. // var dict = root.SelectSingleNode("dict");
  84. // SetVersion(version, dict, "CFBundleVersion");
  85. // SetVersion(version, dict, "CFBundleShortVersionString");
  86. // }
  87. // document.Save(file);
  88. // }
  89. // }
  90. // catch (Exception e)
  91. // {
  92. // Console.WriteLine($"load XML[{file}] err:{e}");
  93. // }
  94. // }
  95. // files = Directory.GetFiles(folder, "*.Core.csproj", SearchOption.AllDirectories);
  96. // UpdateFileVersion(version, files);
  97. // files = Directory.GetFiles(folder, "*.Management.csproj", SearchOption.AllDirectories);
  98. // UpdateFileVersion(version, files);
  99. var files = Directory.GetFiles(folder, "*.csproj", SearchOption.AllDirectories);
  100. // UpdateStandardProjectVersion(version, files);
  101. UpdateNetProjectVersion(version, files);
  102. }
  103. catch (Exception e)
  104. {
  105. Console.WriteLine(e.Message + e.StackTrace);
  106. }
  107. }
  108. /// <summary>
  109. /// .net 6.0 工程 更新版本
  110. /// </summary>
  111. /// <param name="version"></param>
  112. /// <param name="files"></param>
  113. private static void UpdateNetProjectVersion(string version, string[] files)
  114. {
  115. foreach (var file in files)
  116. {
  117. if (File.Exists(file))
  118. {
  119. //XML
  120. var document = new XmlDocument();
  121. document.Load(file);
  122. var root = document.SelectSingleNode("Project");
  123. if (root != null)
  124. {
  125. var propertyGroupNode = root.SelectSingleNode("PropertyGroup");
  126. if (propertyGroupNode != null)
  127. {
  128. var versionNode = propertyGroupNode.SelectSingleNode("Version");
  129. if (versionNode == null)
  130. {
  131. versionNode = document.CreateElement("Version");
  132. propertyGroupNode.AppendChild(versionNode);
  133. }
  134. versionNode.InnerText = version;
  135. var assemblyVersionNode = propertyGroupNode.SelectSingleNode("AssemblyVersion");
  136. if (assemblyVersionNode == null)
  137. {
  138. assemblyVersionNode = document.CreateElement("AssemblyVersion");
  139. propertyGroupNode.AppendChild(assemblyVersionNode);
  140. }
  141. assemblyVersionNode.InnerText = version;
  142. var fileVersionNode = propertyGroupNode.SelectSingleNode("FileVersion");
  143. if (fileVersionNode == null)
  144. {
  145. fileVersionNode = document.CreateElement("FileVersion");
  146. propertyGroupNode.AppendChild(fileVersionNode);
  147. }
  148. fileVersionNode.InnerText = version;
  149. }
  150. }
  151. document.Save(file);
  152. Console.WriteLine("VersionTool updated versions File: " + file);
  153. }
  154. }
  155. }
  156. // private static void UpdateFileVersion(string version, string[] files)
  157. // {
  158. // foreach (var file in files)
  159. // {
  160. // if (File.Exists(file))
  161. // {
  162. // //XML
  163. // var document = new XmlDocument();
  164. // document.Load(file);
  165. // var root = document.SelectSingleNode("Project");
  166. // if (root != null)
  167. // {
  168. // var propertyGroups = root.SelectNodes("PropertyGroup");
  169. // if (propertyGroups != null && propertyGroups.Count > 0)
  170. // {
  171. // foreach (XmlNode node in propertyGroups)
  172. // {
  173. // var assemblyVersionNode = node.SelectSingleNode("AssemblyVersion");
  174. // if (assemblyVersionNode != null)
  175. // {
  176. // assemblyVersionNode.InnerText = version;
  177. // }
  178. // var versionNode = node.SelectSingleNode("Version");
  179. // if (versionNode != null)
  180. // {
  181. // versionNode.InnerText = version;
  182. // }
  183. // }
  184. // }
  185. // }
  186. // document.Save(file);
  187. // }
  188. // }
  189. // }
  190. // private static void UpdateStandardProjectVersion(string version, string[] files)
  191. // {
  192. // foreach (var file in files)
  193. // {
  194. // if (File.Exists(file))
  195. // {
  196. // //XML
  197. // var document = new XmlDocument();
  198. // document.Load(file);
  199. // var root = document.SelectSingleNode("Project");
  200. // if (root != null)
  201. // {
  202. // var propertyGroupNode = root.SelectSingleNode("PropertyGroup");
  203. // if (propertyGroupNode != null)
  204. // {
  205. // var targetFrameworkNode = propertyGroupNode.SelectSingleNode("TargetFramework");
  206. // if (targetFrameworkNode != null && targetFrameworkNode.InnerText.StartsWith("netstandard"))
  207. // {
  208. // var versionNode = propertyGroupNode.SelectSingleNode("Version");
  209. // if (versionNode == null)
  210. // {
  211. // versionNode = document.CreateElement("Version");
  212. // propertyGroupNode.AppendChild(versionNode);
  213. // }
  214. // versionNode.InnerText = version;
  215. // }
  216. // }
  217. // }
  218. // document.Save(file);
  219. // }
  220. // }
  221. // }
  222. // private static void SetVersion(string version, XmlNode dict, string fieldNeedToSetVersion)
  223. // {
  224. // var index = 0;
  225. // if (dict != null)
  226. // {
  227. // foreach (XmlNode item in dict.ChildNodes)
  228. // {
  229. // index++;
  230. // if (item.InnerText == fieldNeedToSetVersion)
  231. // {
  232. // break;
  233. // }
  234. // }
  235. // var v = Version.Parse(version);
  236. // dict.ChildNodes[index].InnerText = $"{v.Major}.{v.Minor}.{v.Build}";
  237. // }
  238. // }
  239. }
  240. }