AssemblyUpdater.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. }
  153. }
  154. }
  155. // private static void UpdateFileVersion(string version, string[] files)
  156. // {
  157. // foreach (var file in files)
  158. // {
  159. // if (File.Exists(file))
  160. // {
  161. // //XML
  162. // var document = new XmlDocument();
  163. // document.Load(file);
  164. // var root = document.SelectSingleNode("Project");
  165. // if (root != null)
  166. // {
  167. // var propertyGroups = root.SelectNodes("PropertyGroup");
  168. // if (propertyGroups != null && propertyGroups.Count > 0)
  169. // {
  170. // foreach (XmlNode node in propertyGroups)
  171. // {
  172. // var assemblyVersionNode = node.SelectSingleNode("AssemblyVersion");
  173. // if (assemblyVersionNode != null)
  174. // {
  175. // assemblyVersionNode.InnerText = version;
  176. // }
  177. // var versionNode = node.SelectSingleNode("Version");
  178. // if (versionNode != null)
  179. // {
  180. // versionNode.InnerText = version;
  181. // }
  182. // }
  183. // }
  184. // }
  185. // document.Save(file);
  186. // }
  187. // }
  188. // }
  189. // private static void UpdateStandardProjectVersion(string version, string[] files)
  190. // {
  191. // foreach (var file in files)
  192. // {
  193. // if (File.Exists(file))
  194. // {
  195. // //XML
  196. // var document = new XmlDocument();
  197. // document.Load(file);
  198. // var root = document.SelectSingleNode("Project");
  199. // if (root != null)
  200. // {
  201. // var propertyGroupNode = root.SelectSingleNode("PropertyGroup");
  202. // if (propertyGroupNode != null)
  203. // {
  204. // var targetFrameworkNode = propertyGroupNode.SelectSingleNode("TargetFramework");
  205. // if (targetFrameworkNode != null && targetFrameworkNode.InnerText.StartsWith("netstandard"))
  206. // {
  207. // var versionNode = propertyGroupNode.SelectSingleNode("Version");
  208. // if (versionNode == null)
  209. // {
  210. // versionNode = document.CreateElement("Version");
  211. // propertyGroupNode.AppendChild(versionNode);
  212. // }
  213. // versionNode.InnerText = version;
  214. // }
  215. // }
  216. // }
  217. // document.Save(file);
  218. // }
  219. // }
  220. // }
  221. // private static void SetVersion(string version, XmlNode dict, string fieldNeedToSetVersion)
  222. // {
  223. // var index = 0;
  224. // if (dict != null)
  225. // {
  226. // foreach (XmlNode item in dict.ChildNodes)
  227. // {
  228. // index++;
  229. // if (item.InnerText == fieldNeedToSetVersion)
  230. // {
  231. // break;
  232. // }
  233. // }
  234. // var v = Version.Parse(version);
  235. // dict.ChildNodes[index].InnerText = $"{v.Major}.{v.Minor}.{v.Build}";
  236. // }
  237. // }
  238. }
  239. }