public VersionChangerDialog(SolutionVersion VersionData, Solution MainSolution) : this() { mVersionData = VersionData; mSolution = MainSolution; edtSolVersion.Text = VersionData.Version.ToString (); if (VersionData.HasIOSProjects) { edtiOSShort.Text = iOSAppVersion.ToShortVersion (VersionData.Version); edtiOSShort.Sensitive = true; lblIOS.Sensitive = true; } else if (VersionData.HasMacProjects) { edtiOSShort.Text = MacAppVersion.ToShortVersion(VersionData.Version); edtiOSShort.Sensitive = true; lblIOS.Sensitive = true; } if (VersionData.HasAndroidProjects) { edtAndroidBuild.Text = AndroidAppVersion.ToBuild (VersionData.Version); edtAndroidBuild.Sensitive = true; lblAndroid.Sensitive = true; } btnOk.Clicked += (object sender, EventArgs e) => { var aDict = new Dictionary<String,String> (); if (edtAndroidBuild.Sensitive) { aDict.Add ("android", edtAndroidBuild.Text); } if (edtiOSShort.Sensitive) { aDict.Add ("cocoa", edtiOSShort.Text); } SolutionProcessor.UpdateVersions (edtSolVersion.Text, aDict, mVersionData, mSolution); }; }
/// <summary> /// Builds the versions from the projects /// </summary> /// <param name="MainSolution">The main solution.</param> /// <returns></returns> /// <exception cref="System.Exception"></exception> public static SolutionVersion BuildVersions (Solution MainSolution) { var solVersion = new SolutionVersion () { Version = new Version (MainSolution.Version), }; try { foreach (Project proj in MainSolution.GetAllProjects()) { String directory = String.Empty; if (!String.IsNullOrEmpty (proj.FileName)) { try { directory = Path.GetDirectoryName (proj.FileName); } catch (Exception ex) { throw new Exception (String.Format ("Path {0} is invalid", proj.FileName), ex); } var newVersion = new ProjectVersion () { ProjType = ProjectType.DotNet, SourceProject = proj, Version = new Version (proj.Version), }; var paths = new List<String> (); //c# sub folder paths.Add (Path.Combine (Path.Combine (directory, @"Properties"), "AssemblyInfo.cs")); paths.Add (Path.Combine (directory, "AssemblyInfo.cs")); paths.Add (Path.Combine (Path.Combine (directory, @"My Project"), "AssemblyInfo.vb")); paths.Add (Path.Combine (directory, "AssemblyInfo.vb")); foreach (var aPath in paths) { //c or vb.net if (File.Exists (aPath)) { newVersion.AssemblyVersionInfo = new AssemblyVersionInfo (aPath); continue; } } var iOSTypes = new List<String>{ "{FEACFBD2-3405-455C-9665-78FE426C6842}","{EE2C853D-36AF-4FDB-B1AD-8E90477E2198}"}; var androidTypes = new List<String> { "{EFBA0AD7-5A72-4C68-AF49-83D382785DCF}","{10368E6C-D01B-4462-8E8B-01FC667A7035}"}; var macTypes = new List<String> { "{A3F8F2AB-B479-4A4A-A458-A89E7DC349F1}", "{EE2C853D-36AF-4FDB-B1AD-8E90477E2198}" }; if (iOSTypes.Contains(proj.FlavorGuids.First())) { var iVersion = new iOSAppVersion(); var infoPlist = proj.Files.FirstOrDefault(x => x.Name.ToLower().Contains("info.plist")); if (infoPlist != null) { iVersion.FilePath = infoPlist.FilePath; // only set if the info.plist exists newVersion.AppVerisonInfo = iVersion; newVersion.ProjType = ProjectType.iOS; } } else if (androidTypes.Contains(proj.FlavorGuids.First())) { var aVersion = new AndroidAppVersion(); var manifest = proj.Files.FirstOrDefault(x => x.Name.ToLower().Contains("androidmanifest.xml")); if (manifest != null) { aVersion.FilePath = manifest.FilePath; //only set for the apps with a manifest newVersion.ProjType = ProjectType.Android; newVersion.AppVerisonInfo = aVersion; } } else if (macTypes.Contains(proj.FlavorGuids.First())) { var apVersion = new MacAppVersion(); var infoPlist = proj.Files.FirstOrDefault(x => x.Name.ToLower().Contains("info.plist")); if (infoPlist != null) { apVersion.FilePath = infoPlist.FilePath; // only set if the info.plist exists newVersion.AppVerisonInfo = apVersion; newVersion.ProjType = ProjectType.Mac; } } solVersion.Projects.Add (newVersion); } } } catch { } return solVersion; }
/// <summary> /// Updates the versions. /// </summary> /// <param name="MainVersion">Main version.</param> /// <param name="AdditionaVersions">Additiona versions.</param> /// <param name="Data">Data.</param> /// <param name="MainSolution">Main solution.</param> public async static void UpdateVersions (String MainVersion, Dictionary<String,String> AdditionaVersions, SolutionVersion Data, Solution MainSolution) { var aProgess = new ProgressMonitor(); if (MainSolution != null) { MainSolution.Version = MainVersion; await MainSolution.SaveAsync (aProgess); } if (Data != null) { ///Update the version number of items that aren't synced var unsynceditems = from e in Data.Projects where e.SourceProject.SyncVersionWithSolution.Equals (false) select e; foreach (var aProj in unsynceditems.ToList()) { aProj.SourceProject.Version = MainVersion; await aProj.SourceProject.SaveAsync(aProgess); } //now update the assmebly data var itemsWithAssemInfo = from e in Data.Projects where e.AssemblyVersionInfo != null select e; foreach (var aProj in itemsWithAssemInfo.ToList()) { aProj.AssemblyVersionInfo.AssemblyVersion = new Version (MainVersion); aProj.AssemblyVersionInfo.Update (); } if (AdditionaVersions != null) { if (AdditionaVersions.ContainsKey ("cocoa")) { var shortVersion = AdditionaVersions ["cocoa"]; //process iOS first var iOSItems = from e in Data.Projects where e.AppVerisonInfo is CocoaAppVersion select e; foreach (var aProj in iOSItems.ToList()) { aProj.AppVerisonInfo.VersionOne = shortVersion; aProj.AppVerisonInfo.VersionTwo = MainVersion.ToString (); aProj.AppVerisonInfo.Update (); } } if (AdditionaVersions.ContainsKey ("android")) { var build = AdditionaVersions ["android"]; var iOSItems = from e in Data.Projects where e.AppVerisonInfo is AndroidAppVersion select e; foreach (var aProj in iOSItems.ToList()) { aProj.AppVerisonInfo.VersionOne = build; aProj.AppVerisonInfo.VersionTwo = MainVersion.ToString (); aProj.AppVerisonInfo.Update (); } } } } }