Datei: Tools/PatchNdoVersion/Program.cs
Last Commit (37eab6b)
| 1 | using System.Text; |
| 2 | using System.Text.RegularExpressions; |
| 3 | using System.Xml.Linq; |
| 4 | using System.Linq; |
| 5 | |
| 6 | namespace PatchNdoVersion |
| 7 | { |
| 8 | ····internal class Program |
| 9 | ····{ |
| 10 | ········static int Main(string[] args) |
| 11 | ········{ |
| 12 | ············if (args.Length < 3) |
| 13 | ············{ |
| 14 | ················Console.WriteLine( "usage: PatchNdoVersion <ProjFile> -i <NDOInterfaces-Version> -n <NDO-Version> -e <NDOEnhancer-Version>" ); |
| 15 | ················return -1; |
| 16 | ············} |
| 17 | |
| 18 | ············var projFile = args[0]; |
| 19 | ············string? iVersion = null; |
| 20 | ············string? eVersion = null; |
| 21 | ············string? nVersion = null; |
| 22 | |
| 23 | |
| 24 | ············if (!File.Exists(projFile)) |
| 25 | ············{ |
| 26 | ················Console.WriteLine( $"File doesn't exist: '{projFile}'" ); |
| 27 | ················return -3; |
| 28 | ············} |
| 29 | |
| 30 | |
| 31 | ············try |
| 32 | ············{ |
| 33 | ················Regex regex = new Regex(@"^\d+\.\d+\.\d+"); |
| 34 | ················var i = Array.IndexOf(args, "-i"); |
| 35 | ················if (i > 0) |
| 36 | ················{ |
| 37 | ····················if (args.Length < i + 2) |
| 38 | ························throw new Exception( "Option -i needs a parameter." ); |
| 39 | ···················· |
| 40 | ····················iVersion = args[i + 1]; |
| 41 | |
| 42 | ····················if (!regex.Match( iVersion ).Success) |
| 43 | ························throw new Exception( "Parameter of -i must be a version string" ); |
| 44 | ················} |
| 45 | |
| 46 | ················var e = Array.IndexOf(args, "-e"); |
| 47 | ················if (e > 0) |
| 48 | ················{ |
| 49 | ····················if (args.Length < e + 2) |
| 50 | ························throw new Exception( "Option -e needs a parameter." ); |
| 51 | |
| 52 | ····················eVersion = args[e + 1]; |
| 53 | |
| 54 | ····················if (!regex.Match( eVersion ).Success) |
| 55 | ························throw new Exception( "Parameter of -e must be a version string" ); |
| 56 | ················} |
| 57 | |
| 58 | ················var n = Array.IndexOf(args, "-n"); |
| 59 | ················if (n > 0) |
| 60 | ················{ |
| 61 | ····················if (args.Length < n + 2) |
| 62 | ························throw new Exception( "Option -n needs a parameter." ); |
| 63 | |
| 64 | ····················nVersion = args[n + 1]; |
| 65 | |
| 66 | ····················if (!regex.Match( nVersion ).Success) |
| 67 | ························throw new Exception( "Parameter of -n must be a version string" ); |
| 68 | ················} |
| 69 | ················ |
| 70 | ················string ndoRootPath = AppDomain.CurrentDomain.BaseDirectory; |
| 71 | |
| 72 | ················XDocument doc = XDocument.Load( projFile ); |
| 73 | ················var project = doc.Root!; |
| 74 | |
| 75 | ················var prElement = project.Elements("ItemGroup").FirstOrDefault(pg => pg.Element("PackageReference") != null); ; |
| 76 | ················if (prElement == null) |
| 77 | ····················throw new Exception( "Project file doesn't have PackageReference items" ); |
| 78 | |
| 79 | ················if (iVersion != null) |
| 80 | ················{ |
| 81 | ····················var iElement = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value == "NDOInterfaces"); |
| 82 | if ( iElement != null) |
| 83 | ····················{ |
| 84 | ························iElement.Attribute( "Version" )!.Value = iVersion; |
| 85 | ····················} |
| 86 | ····················else |
| 87 | ····················{ |
| 88 | ························throw new Exception( "Project needs a PackageReference to NDOInterfaces" ); |
| 89 | ····················} |
| 90 | ················} |
| 91 | |
| 92 | ················if (eVersion != null) |
| 93 | ················{ |
| 94 | ····················var eElement = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value == "NDOEnhancer"); |
| 95 | if ( eElement != null) |
| 96 | ····················{ |
| 97 | ························eElement.Attribute( "Version" )!.Value = eVersion; |
| 98 | ····················} |
| 99 | ····················else |
| 100 | ····················{ |
| 101 | ························throw new Exception( "Project needs a PackageReference to NDOEnhancer" ); |
| 102 | ····················} |
| 103 | ················} |
| 104 | |
| 105 | ················if (nVersion != null) |
| 106 | ················{ |
| 107 | ····················var element = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value.ToLower() == "ndo.dll"); |
| 108 | if ( element != null) |
| 109 | ····················{ |
| 110 | ························element.Attribute( "Version" )!.Value = nVersion; |
| 111 | ····················} |
| 112 | ····················else |
| 113 | ····················{ |
| 114 | ························throw new Exception( "Project needs a PackageReference to NDO.dll" ); |
| 115 | ····················} |
| 116 | ················} |
| 117 | |
| 118 | ················doc.Save(projFile); |
| 119 | |
| 120 | ················return 0; |
| 121 | ············} |
| 122 | ············catch (Exception ex) |
| 123 | ············{ |
| 124 | ················Console.WriteLine( ex.ToString() ); |
| 125 | ················return -1; |
| 126 | ············} |
| 127 | ········} |
| 128 | ····} |
| 129 | } |
| 130 |
New Commit (950e3ef)
| 1 | using System.Text; |
| 2 | using System.Text.RegularExpressions; |
| 3 | using System.Xml.Linq; |
| 4 | using System.Linq; |
| 5 | |
| 6 | namespace PatchNdoVersion |
| 7 | { |
| 8 | ····internal class Program |
| 9 | ····{ |
| 10 | ········static int Main(string[] args) |
| 11 | ········{ |
| 12 | ············if (args.Length < 3) |
| 13 | ············{ |
| 14 | ················Console.WriteLine( "usage: PatchNdoVersion <ProjFile> -i <NDOInterfaces-Version> -n <NDO-Version> -e <NDOEnhancer-Version>" ); |
| 15 | ················return -1; |
| 16 | ············} |
| 17 | |
| 18 | ············var projFile = args[0]; |
| 19 | ············string? iVersion = null; |
| 20 | ············string? eVersion = null; |
| 21 | ············string? nVersion = null; |
| 22 | |
| 23 | |
| 24 | ············if (!File.Exists(projFile)) |
| 25 | ············{ |
| 26 | ················Console.WriteLine( $"File doesn't exist: '{projFile}'" ); |
| 27 | ················return -3; |
| 28 | ············} |
| 29 | |
| 30 | |
| 31 | ············try |
| 32 | ············{ |
| 33 | ················Regex regex = new Regex(@"^\d+\.\d+\.\d+"); |
| 34 | ················var changed = false; |
| 35 | ················var i = Array.IndexOf(args, "-i"); |
| 36 | ················if (i > 0) |
| 37 | ················{ |
| 38 | ····················if (args.Length < i + 2) |
| 39 | ························throw new Exception( "Option -i needs a parameter." ); |
| 40 | ···················· |
| 41 | ····················iVersion = args[i + 1]; |
| 42 | |
| 43 | ····················if (!regex.Match( iVersion ).Success) |
| 44 | ························throw new Exception( "Parameter of -i must be a version string" ); |
| 45 | ················} |
| 46 | |
| 47 | ················var e = Array.IndexOf(args, "-e"); |
| 48 | ················if (e > 0) |
| 49 | ················{ |
| 50 | ····················if (args.Length < e + 2) |
| 51 | ························throw new Exception( "Option -e needs a parameter." ); |
| 52 | |
| 53 | ····················eVersion = args[e + 1]; |
| 54 | |
| 55 | ····················if (!regex.Match( eVersion ).Success) |
| 56 | ························throw new Exception( "Parameter of -e must be a version string" ); |
| 57 | ················} |
| 58 | |
| 59 | ················var n = Array.IndexOf(args, "-n"); |
| 60 | ················if (n > 0) |
| 61 | ················{ |
| 62 | ····················if (args.Length < n + 2) |
| 63 | ························throw new Exception( "Option -n needs a parameter." ); |
| 64 | |
| 65 | ····················nVersion = args[n + 1]; |
| 66 | |
| 67 | ····················if (!regex.Match( nVersion ).Success) |
| 68 | ························throw new Exception( "Parameter of -n must be a version string" ); |
| 69 | ················} |
| 70 | ················ |
| 71 | ················string ndoRootPath = AppDomain.CurrentDomain.BaseDirectory; |
| 72 | |
| 73 | ················XDocument doc = XDocument.Load( projFile ); |
| 74 | ················var project = doc.Root!; |
| 75 | |
| 76 | ················var prElement = project.Elements("ItemGroup").FirstOrDefault(pg => pg.Element("PackageReference") != null); ; |
| 77 | ················if (prElement == null) |
| 78 | ····················throw new Exception( "Project file doesn't have PackageReference items" ); |
| 79 | |
| 80 | ················if (iVersion != null) |
| 81 | ················{ |
| 82 | ····················var iElement = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value == "NDOInterfaces"); |
| 83 | if ( iElement != null && iElement. Attribute( "Version") ?. Value != iVersion) |
| 84 | ····················{ |
| 85 | ························iElement.Attribute( "Version" )!.Value = iVersion; |
| 86 | ························changed = true; |
| 87 | ····················} |
| 88 | ····················else |
| 89 | ····················{ |
| 90 | ························throw new Exception( "Project needs a PackageReference to NDOInterfaces" ); |
| 91 | ····················} |
| 92 | ················} |
| 93 | |
| 94 | ················if (eVersion != null) |
| 95 | ················{ |
| 96 | ····················var eElement = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value == "NDOEnhancer"); |
| 97 | if ( eElement != null && eElement. Attribute( "Version" ) ?. Value != eVersion) |
| 98 | ····················{ |
| 99 | ························eElement.Attribute( "Version" )!.Value = eVersion; |
| 100 | ························changed = true; |
| 101 | ····················} |
| 102 | ····················else |
| 103 | ····················{ |
| 104 | ························throw new Exception( "Project needs a PackageReference to NDOEnhancer" ); |
| 105 | ····················} |
| 106 | ················} |
| 107 | |
| 108 | ················if (nVersion != null) |
| 109 | ················{ |
| 110 | ····················var element = prElement.Elements("PackageReference").FirstOrDefault(el => el.Attribute("Include")?.Value.ToLower() == "ndo.dll"); |
| 111 | if ( element != null && element. Attribute( "Version" ) ?. Value != nVersion) |
| 112 | ····················{ |
| 113 | ························element.Attribute( "Version" )!.Value = nVersion; |
| 114 | ························changed = true; |
| 115 | ····················} |
| 116 | ····················else |
| 117 | ····················{ |
| 118 | ························throw new Exception( "Project needs a PackageReference to NDO.dll" ); |
| 119 | ····················} |
| 120 | ················} |
| 121 | |
| 122 | ················if (changed) |
| 123 | ····················doc.Save(projFile); |
| 124 | |
| 125 | ················return 0; |
| 126 | ············} |
| 127 | ············catch (Exception ex) |
| 128 | ············{ |
| 129 | ················Console.WriteLine( ex.ToString() ); |
| 130 | ················return -1; |
| 131 | ············} |
| 132 | ········} |
| 133 | ····} |
| 134 | } |
| 135 |