public static ComplexVersion Parse(string verStr)
            {
                ComplexVersion ver = null;

                if (verStr != null)
                {
                    var splitVerStr = verStr.Split(new char[] { '-' }, 2);

                    var strongVerStr = splitVerStr[0];

                    var prerelVerStr = splitVerStr.Length > 1 ? splitVerStr[1] : null;

                    Version strongVer;

                    if (Version.TryParse(strongVerStr, out strongVer))
                    {
                        ver = new ComplexVersion()
                        {
                            StrongVersion = strongVer, Prerelease = prerelVerStr
                        };
                    }
                }

                return(ver);
            }
        public static ProjectJsonDependencyInfo MergeToLatest(IEnumerable <ProjectJsonDependencyInfo> projectJsons, string oldprerelease = null, string newprerelease = null)
        {
            var merged = new ProjectJsonDependencyInfo();

            merged.dependencies = new Dictionary <string, string>();

            foreach (var pjson in projectJsons)
            {
                if (pjson.dependencies != null)
                {
                    foreach (var depend in pjson.dependencies)
                    {
                        var depVer = ComplexVersion.Parse(depend.Value);

                        if (newprerelease != null && depVer.Prerelease == oldprerelease)
                        {
                            depVer.Prerelease = newprerelease;
                        }

                        //if the dependency is not present in the merged dependencies OR the version in the current pjson is a greater than the one in merged
                        //if string.Compare returns > 0 then depend.Value is greater than the one in merged, this should mean a later version
                        if (!merged.dependencies.ContainsKey(depend.Key) || (ComplexVersion.Parse(merged.dependencies[depend.Key]) < depVer))
                        {
                            merged.dependencies[depend.Key] = depVer.ToString();
                        }
                    }
                }
            }

            return(merged);
        }
            public static ComplexVersion Parse(string verStr)
            {
                ComplexVersion ver = null;

                if(verStr != null)
                {
                    var splitVerStr = verStr.Split(new char[] { '-' }, 2);

                    var strongVerStr = splitVerStr[0];

                    var prerelVerStr = splitVerStr.Length > 1 ? splitVerStr[1] : null;

                    Version strongVer;

                    if(Version.TryParse(strongVerStr, out strongVer))
                    {
                        ver = new ComplexVersion() { StrongVersion = strongVer, Prerelease = prerelVerStr };
                    }
                }

                return ver;
            }