/// <summary> /// Updates the file. /// </summary> /// <param name="item">The item.</param> /// <param name="newAssemblyVersion">The new assembly version.</param> /// <param name="newFileVersion">The new file version.</param> public void UpdateFile(ProjectItem item, Version newAssemblyVersion, Version newFileVersion = null, string versionSuffix = null) { ThreadHelper.ThrowIfNotOnUIThread(); if (!item.IsOpen) { item.Open(); } var aDoc = item.Document; TextDocument editDoc = (TextDocument)aDoc.Object("TextDocument"); var objEditPt = editDoc.StartPoint.CreateEditPoint(); objEditPt.StartOfDocument(); var endPpint = editDoc.EndPoint.CreateEditPoint(); endPpint.EndOfDocument(); string searchText = "AssemblyVersion"; string searchText2 = "AssemblyFileVersion"; string searchText3 = "AssemblyInformationalVersion"; string searchVstart = "(\""; string assemblyText = "assembly:"; //if the file version is null, as seperate version have not been set if (newFileVersion == null) { newFileVersion = newAssemblyVersion; } var endLine = endPpint.Line; var lastLine = false; while (true) { var aLine = objEditPt.GetText(objEditPt.LineLength); //Debug.WriteLine($"Line: {objEditPt.Line} - {aLine}"); if (!aLine.StartsWith("//") && !aLine.StartsWith("'")) { if (aLine.ToLower().Contains(assemblyText)) { if (aLine.Contains(searchText)) { //now get the version number int locationStart = aLine.IndexOf(searchText); var searchLength = searchText.Length; string initail = aLine.Substring((locationStart + searchText.Length)); var openerlocationStart = initail.IndexOf(searchVstart); searchLength += (openerlocationStart + searchVstart.Length); //locationStart += openerlocationStart; string firstBit = aLine.Substring(0, (locationStart + searchLength)); string remaining = aLine.Substring((locationStart + searchLength)); int locationEnd = remaining.IndexOf("\""); string end = remaining.Substring(locationEnd); var newVersionValue = VersionHelper.CalculateVersion(newAssemblyVersion, includeZeroRevision: true); var newLine = string.Format("{0}{1}{2}", firstBit, newVersionValue, end); objEditPt.ReplaceText(objEditPt.LineLength, newLine, (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers); } if (aLine.Contains(searchText2)) { int locationStart = aLine.IndexOf(searchText2); var searchLength = searchText2.Length; string initail = aLine.Substring((locationStart + searchText2.Length)); var openerlocationStart = initail.IndexOf(searchVstart); searchLength += (openerlocationStart + searchVstart.Length); string firstBit = aLine.Substring(0, (locationStart + searchLength)); string remaining = aLine.Substring((locationStart + searchLength)); int locationEnd = remaining.IndexOf("\""); string end = remaining.Substring(locationEnd); var newFileVersionValue = VersionHelper.CalculateVersion(newFileVersion, includeZeroRevision: true); var newLine = string.Format("{0}{1}{2}", firstBit, newFileVersionValue.ToString(), end); objEditPt.ReplaceText(objEditPt.LineLength, newLine, (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers); } if (aLine.Contains(searchText3)) { int locationStart = aLine.IndexOf(searchText3); var searchLength = searchText3.Length; string initail = aLine.Substring((locationStart + searchText3.Length)); var openerlocationStart = initail.IndexOf(searchVstart); searchLength += (openerlocationStart + searchVstart.Length); string firstBit = aLine.Substring(0, (locationStart + searchLength)); string remaining = aLine.Substring((locationStart + searchLength)); int locationEnd = remaining.IndexOf("\""); string end = remaining.Substring(locationEnd); var newFileVersionValue = VersionHelper.CalculateVersion(newFileVersion, versionSuffix, true); var newLine = string.Format("{0}{1}{2}", firstBit, newFileVersionValue.ToString(), end); objEditPt.ReplaceText(objEditPt.LineLength, newLine, (int)vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers); //var aLine2 = objEditPt.GetText(objEditPt.LineLength); } } } //check to see if the last line has already been processed if (objEditPt.Line.Equals(endLine) && lastLine == true) { break;//break the loop } objEditPt.LineDown(); objEditPt.StartOfLine(); //if the we're on the last line, allow one further loop to process the line if (objEditPt.Line.Equals(endLine)) { lastLine = true; } } //if (updatedVersionSuffix == false && string.IsNullOrEmpty(versionSuffix) == false) //{ // var newFileVersionValue = (newFileVersion.Revision == -1) ? $"{newFileVersion.Major}.{newFileVersion.Minor}.{newFileVersion.Build}.0" : newFileVersion.ToString(); // newFileVersionValue += $"-{versionSuffix}"; // var newLine = String.Format("[assembly: AssemblyInformationalVersion(\"{0}\")]\r\n", newFileVersionValue); // objEditPt.Insert(newLine); //} item.Save(); aDoc.Close(); }
internal void UpdateProject(Project realProject, Version newVersion, Version fileVersion = null, string versionSuffix = null) { ThreadHelper.ThrowIfNotOnUIThread(); foreach (Property aProp in realProject.Properties) { var lowerCase = aProp.Name.ToLower(); if (lowerCase.Equals("assemblyversion")) { aProp.Value = (newVersion.Revision == -1) ? newVersion.ToString(3) : newVersion.ToString(); } else if (lowerCase.Equals("fileversion")) { var fVersion = (fileVersion == null) ? newVersion : fileVersion; aProp.Value = (fVersion.Revision == -1) ? fVersion.ToString(3) : fVersion.ToString(); } else if (lowerCase.Equals("version")) { var str = VersionHelper.CalculateVersion(newVersion, versionSuffix); aProp.Value = str; } else if (lowerCase.Equals("versionsuffix")) { aProp.Value = versionSuffix; } else if (lowerCase.Equals("packageversion", StringComparison.OrdinalIgnoreCase)) { var str = VersionHelper.CalculateVersion(newVersion, versionSuffix); aProp.Value = str; } else if (lowerCase.Equals("assemblyinformationalversion") || aProp.Name.ToLower().Equals("informationalversion")) { var str = VersionHelper.CalculateVersion(newVersion, versionSuffix); aProp.Value = str; } } realProject.Save(); //Update some properties via the xml, such as InformationalVersion var txt = File.ReadAllLines(realProject.FileName); var searchableText = string.Join("", txt); var seachText = "InformationalVersion"; var seachText2 = "PackageVersion"; var outPutLines = new List <string>(); //update informational version and package version if (searchableText.Contains(seachText) || searchableText.Contains(seachText2)) { foreach (var aLine in txt) { if (aLine.Contains($"<{seachText}>")) { var newLine = aLine; var pos = newLine.IndexOf($"<{seachText}>"); var closer = newLine.IndexOf($"</{seachText}>"); if (pos != -1 && closer != -1) { newLine = newLine.Substring(0, pos + (seachText.Length + 2)); newLine += VersionHelper.CalculateVersion(newVersion, versionSuffix); newLine += $"</{seachText}>"; outPutLines.Add(newLine); } } else if (aLine.Contains($"<{seachText2}>")) { var newLine = aLine; var pos = newLine.IndexOf($"<{seachText2}>"); var closer = newLine.IndexOf($"</{seachText2}>"); if (pos != -1 && closer != -1) { newLine = newLine.Substring(0, pos + (seachText2.Length + 2)); newLine += VersionHelper.CalculateVersion(newVersion, versionSuffix); newLine += $"</{seachText2}>"; outPutLines.Add(newLine); } } else { outPutLines.Add(aLine); } } } if (outPutLines.Count > 0) //only write if changes occured { File.WriteAllLines(realProject.FileName, outPutLines); } }