public BuildSolutionStep UpdatePackages()
		{
			var packageWithFrameworks = packages as PackageWithFramework[] ?? packages.ToArray();

			packageWithFrameworks =
				packageWithFrameworks.OrderBy(x => x.IsLatestVersion(previousVersions[x.Id])).ToArray();

			var packageUpdateResults = new List<PackageUpdateResult>();

			foreach (var package in packageWithFrameworks)
			{
				var isLatestVersion = package.IsLatestVersion(previousVersions[package.Id]);

				if (isLatestVersion)
				{
					continue;
				}

				package.IncrementAssemblyInfo(buildAndRevision);
			}

			IReadOnlyDictionary<string, Func<Version>> packagesVersion =
				packageWithFrameworks
				.ToDictionary(k => k.Id, v => (Func<Version>)(() => new Version(v.Version)));

			foreach (var package in packageWithFrameworks)
			{
				var nugetDependecies = package.TryUpdateNuspecDependencies(packagesVersion).ToArray();

				var isLatestVersion = package.IsLatestVersion(previousVersions[package.Id]);

				if (!nugetDependecies.Any() && isLatestVersion)
				{
					continue;
				}

				package.UpdateNuspecVersion();

				var updateDataResult = new PackageUpdateDataResult(
					package.Version,
					nugetDependecies,
					package.FrameworkPackages);

				var packageUpdate = new PackageUpdateResult(package.Id, updateDataResult);

				packageUpdateResults.Add(packageUpdate);
			}

			return new BuildSolutionStep(this.buildAndRevision, this.solutionSystemInfo, new NugetPackageResultCollection(packageUpdateResults));
		}
		public PackageUpdateResult(string id, PackageUpdateDataResult data)
		{
			Id = id;
			Data = data;
		}