using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
namespace VersionTool
{
public 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, "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);
var files = Directory.GetFiles(folder, "*.csproj", SearchOption.AllDirectories);
// UpdateStandardProjectVersion(version, files);
UpdateNetProjectVersion(version, files);
}
catch (Exception e)
{
Console.WriteLine(e.Message + e.StackTrace);
}
}
///
/// .net 6.0 工程 更新版本
///
///
///
private static void UpdateNetProjectVersion(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 versionNode = propertyGroupNode.SelectSingleNode("Version");
if (versionNode == null)
{
versionNode = document.CreateElement("Version");
propertyGroupNode.AppendChild(versionNode);
}
versionNode.InnerText = version;
var assemblyVersionNode = propertyGroupNode.SelectSingleNode("AssemblyVersion");
if (assemblyVersionNode == null)
{
assemblyVersionNode = document.CreateElement("AssemblyVersion");
propertyGroupNode.AppendChild(assemblyVersionNode);
}
assemblyVersionNode.InnerText = version;
var fileVersionNode = propertyGroupNode.SelectSingleNode("FileVersion");
if (fileVersionNode == null)
{
fileVersionNode = document.CreateElement("FileVersion");
propertyGroupNode.AppendChild(fileVersionNode);
}
fileVersionNode.InnerText = version;
}
}
document.Save(file);
}
}
}
// 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}";
// }
// }
}
}