public static void Main()
CheckVersions("1.2.0-dev20171108T1730Z", "1.2", "1.2");
CheckVersions("1.2.0-dev20171108T1730Z", "1.2.0", "1.2.1");
CheckVersions("1.2.0-dev20171108T1730Z-ft-test", "1.2.0", "1.2.1");
CheckVersions("1.2.0-dev20171108T1730Z", "1.2.1", "1.2.1");
CheckVersions("1.2", "1.2", "1.2");
CheckVersions("1.2", "0.0", "1.3");
CheckVersions("1.2.23", "1.1.9", "1.3");
CheckVersions("1.2", "1.3", "1.3");
private static void CheckVersions(string versionString, string minRequiredVersionString, string maxRequiredVersionString)
var version = GetVersion(versionString);
var minRequiredVersion = GetVersion(minRequiredVersionString);
var maxRequiredVersion = GetVersion(maxRequiredVersionString);
var result = ((version >= minRequiredVersion) && (version <= maxRequiredVersion))
? "satisfies" : "does not satisfy";
Console.WriteLine("{0} {1} '{2} to {3}'", versionString, result, minRequiredVersionString, maxRequiredVersionString);
private static Version GetVersion(string versionString)
var indexOfDash = versionString.IndexOf('-');
versionString = versionString.Substring(0, indexOfDash);
var versionFields = new int[] { 0, 0, 0, 0 };
var fields = versionString.Split('.');
for (var i = 0; i < fields.Length; i++)
versionFields[i] = int.Parse(fields[i]);
return new Version(versionFields[0], versionFields[1], versionFields[2], versionFields[3]);