public static Version ParseVersion(string version, VersionFormatting formatting) { Version formattedVersion = new Version(); MatchCollection matches; bool result = false; switch (formatting) { case VersionFormatting.MAJOR_MINOR_REVISION: matches = Regex.Matches(version, @"(\d+)\.(\d+)\.(\d+)"); if (matches.Count == 3) { formattedVersion = new Version(Convert.ToInt32(matches[0].Captures[0].Value), Convert.ToInt32(matches[1].Captures[0].Value), 0, Convert.ToInt32(matches[2].Captures[0].Value)); result = true; } break; case VersionFormatting.MAJOR_MINOR_REVISION_BUILD: break; case VersionFormatting.MAJOR_MINOR_BUILD_REVISION: break; } if (!result) { throw new ArgumentException(String.Format("\"{0}\" could not be parsed into \"{1}\" format.", version, Enum.GetName(typeof(VersionFormatting), formatting))); } return(formattedVersion); }
///<summary>Compares two versions with each other.</summary> ///<returns>Returns <c>-1</c> if the <c>primary</c> version is older than the <c>secondary</c> version, <c>0</c> if equal or <c>1</c> if newer.</returns> public static short CompareVersions(Version primary, Version secondary, VersionFormatting formatting) { Version[] versions = new Version[] { primary, secondary }; int[,] versionNumbers = new int[2, 4]; switch (formatting) { case VersionFormatting.MAJOR_MINOR_REVISION_BUILD: versionNumbers = new int[2, 4] { { primary.Major, primary.Minor, primary.Revision, primary.Build }, { secondary.Major, secondary.Minor, secondary.Revision, secondary.Build } }; break; case VersionFormatting.MAJOR_MINOR_BUILD_REVISION: versionNumbers = new int[2, 4] { { primary.Major, primary.Minor, primary.Build, primary.Revision }, { secondary.Major, secondary.Minor, secondary.Build, secondary.Revision } }; break; case VersionFormatting.MAJOR_MINOR_REVISION: versionNumbers = new int[2, 3] { { primary.Major, primary.Minor, primary.Revision }, { secondary.Major, secondary.Minor, secondary.Revision } }; break; } // Compare versions for (int i = 0; i < versionNumbers.GetLength(1); i++) { if (versionNumbers[0, i] < versionNumbers[1, i]) { return(-1); } else if (versionNumbers[0, i] > versionNumbers[1, i]) { return(1); } } return(0); }
public static string ParseVersion(Version version, VersionFormatting formatting) { StringBuilder builder = new StringBuilder(); switch (formatting) { case VersionFormatting.MAJOR_MINOR_REVISION: builder.Append(String.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Revision)); break; case VersionFormatting.MAJOR_MINOR_REVISION_BUILD: builder.Append(String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Revision, version.Build)); break; case VersionFormatting.MAJOR_MINOR_BUILD_REVISION: builder.Append(version.ToString()); break; } return(builder.ToString()); }