示例#1
0
        /// <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();
        }
示例#2
0
        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);
            }
        }