123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- using System;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Xml;
- namespace VersionUpdater
- {
- public static class AssemblyUpdater
- {
- public static void UpdateVersion(string folder, string version)
- {
- try
- {
- var files = Directory.GetFiles(folder, "AssemblyInfo.cs", SearchOption.AllDirectories).Where(x => x.Contains("Properties")).ToArray();
- foreach (var file in files)
- {
- if (File.Exists(file))
- {
- var sb = new StringBuilder();
- string text;
- using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read))
- {
- using (var sr = new StreamReader(fs))
- {
- string s;
- while ((s = sr.ReadLine()) != null)
- {
- if (s.Contains("assembly: AssemblyVersion"))
- {
- s = Utility.GetStr(s, version);
- }
- if (s.Contains("assembly: AssemblyFileVersion"))
- {
- s = Utility.GetStr(s, version);
- }
- if (s.Contains("assembly: AssemblyDescription"))
- {
- s = Utility.GetStr(s, "Powered by VINNO");
- }
- if (s.Contains("assembly: AssemblyCompany"))
- {
- s = Utility.GetStr(s, "VINNO Technology (Suzhou) Co. Ltd.");
- }
- if (s.Contains("assembly: AssemblyProduct"))
- {
- s = Utility.GetStr(s, "VINNO vCloud System");
- }
- if (s.Contains("assembly: AssemblyCopyright"))
- {
- s = Utility.GetStr(s, "Copyright © VINNO 2018");
- }
- if (s.Contains("assembly: AssemblyTrademark"))
- {
- s = Utility.GetStr(s, "VINNO");
- }
- sb.AppendLine(s);
- }
- text = sb.ToString();
- }
- }
- using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write))
- {
- using (var sw = new StreamWriter(fs, Encoding.UTF8))
- {
- sw.Write(text);
- }
- }
- }
- }
- files = Directory.GetFiles(folder, "AndroidManifest.xml", SearchOption.AllDirectories).Where(x => x.Contains("Properties")).ToArray();
- foreach (var file in files)
- {
- if (File.Exists(file))
- {
- //XML
- var document = new XmlDocument();
- document.Load(file);
- var root = document.SelectSingleNode("manifest");
- if (root != null && root.Attributes != null)
- {
- var v = Version.Parse(version);
- root.Attributes["android:versionCode"].Value = v.Revision.ToString();
- root.Attributes["android:versionName"].Value = version;
- }
- document.Save(file);
- }
- }
- files = Directory.GetFiles(folder, "Info.plist", SearchOption.AllDirectories);
- foreach (var file in files)
- {
- try
- {
- if (File.Exists(file))
- {
- //XML
- var document = new XmlDocument();
- document.Load(file);
- var root = document.SelectSingleNode("plist");
- if (root != null)
- {
- var dict = root.SelectSingleNode("dict");
- SetVersion(version, dict, "CFBundleVersion");
- SetVersion(version, dict, "CFBundleShortVersionString");
- }
- document.Save(file);
- }
- }
- catch (Exception e)
- {
- Console.WriteLine($"load XML[{file}] err:{e}");
- }
- }
- files = Directory.GetFiles(folder, "*.Core.csproj", SearchOption.AllDirectories);
- UpdateFileVersion(version, files);
- files = Directory.GetFiles(folder, "*.Management.csproj", SearchOption.AllDirectories);
- UpdateFileVersion(version, files);
- files = Directory.GetFiles(folder, "*.csproj", SearchOption.AllDirectories);
- UpdateStandardProjectVersion(version, files);
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message + e.StackTrace);
- }
- }
- private static void UpdateFileVersion(string version, string[] files)
- {
- foreach (var file in files)
- {
- if (File.Exists(file))
- {
- //XML
- var document = new XmlDocument();
- document.Load(file);
- var root = document.SelectSingleNode("Project");
- if (root != null)
- {
- var propertyGroups = root.SelectNodes("PropertyGroup");
- if (propertyGroups != null && propertyGroups.Count > 0)
- {
- foreach (XmlNode node in propertyGroups)
- {
- var assemblyVersionNode = node.SelectSingleNode("AssemblyVersion");
- if (assemblyVersionNode != null)
- {
- assemblyVersionNode.InnerText = version;
- }
- var versionNode = node.SelectSingleNode("Version");
- if (versionNode != null)
- {
- versionNode.InnerText = version;
- }
- }
- }
- }
- document.Save(file);
- }
- }
- }
- private static void UpdateStandardProjectVersion(string version, string[] files)
- {
- foreach (var file in files)
- {
- if (File.Exists(file))
- {
- //XML
- var document = new XmlDocument();
- document.Load(file);
- var root = document.SelectSingleNode("Project");
- if (root != null)
- {
- var propertyGroupNode = root.SelectSingleNode("PropertyGroup");
- if(propertyGroupNode!= null)
- {
- var targetFrameworkNode = propertyGroupNode.SelectSingleNode("TargetFramework");
- if(targetFrameworkNode!= null && targetFrameworkNode.InnerText.StartsWith("netstandard"))
- {
- var versionNode = propertyGroupNode.SelectSingleNode("Version");
- if(versionNode== null)
- {
- versionNode = document.CreateElement("Version");
- propertyGroupNode.AppendChild(versionNode);
- }
- versionNode.InnerText = version;
- }
- }
- }
- document.Save(file);
- }
- }
- }
- private static void SetVersion(string version, XmlNode dict, string fieldNeedToSetVersion)
- {
- var index = 0;
- if (dict != null)
- {
- foreach (XmlNode item in dict.ChildNodes)
- {
- index++;
- if (item.InnerText == fieldNeedToSetVersion)
- {
- break;
- }
- }
- var v = Version.Parse(version);
- dict.ChildNodes[index].InnerText = $"{v.Major}.{v.Minor}.{v.Build}";
- }
- }
- }
- }
|