public void UpdateSelf(bool prerelease) { Assembly assembly = typeof(SelfUpdater).Assembly; CoreV2.NuGet.SemanticVersion version = GetNuGetVersion(assembly) ?? new CoreV2.NuGet.SemanticVersion(assembly.GetName().Version); SelfUpdate(AssemblyLocation, prerelease, version); }
internal void SelfUpdate(string exePath, bool prerelease, CoreV2.NuGet.SemanticVersion version) { Console.WriteLine(LocalizedResourceManager.GetString("UpdateCommandCheckingForUpdates"), NuGetConstants.V2FeedUrl); // Get the nuget command line package from the specified repository CoreV2.NuGet.IPackageRepository packageRepository = _repositoryFactory.CreateRepository(NuGetConstants.V2FeedUrl); CoreV2.NuGet.IPackage package = packageRepository.GetUpdates( new [] { new CoreV2.NuGet.PackageName(NuGetCommandLinePackageId, version) }, includePrerelease: prerelease, includeAllVersions: false, targetFrameworks: null, versionConstraints: null).FirstOrDefault(); Console.WriteLine(LocalizedResourceManager.GetString("UpdateCommandCurrentlyRunningNuGetExe"), version); // SemanticVersion is the problem // Check to see if an update is needed if (package == null || version >= package.Version) { Console.WriteLine(LocalizedResourceManager.GetString("UpdateCommandNuGetUpToDate")); } else { Console.WriteLine(LocalizedResourceManager.GetString("UpdateCommandUpdatingNuGet"), package.Version); // Get NuGet.exe file from the package CoreV2.NuGet.IPackageFile file = package.GetFiles().FirstOrDefault(f => Path.GetFileName(f.Path).Equals(NuGetExe, StringComparison.OrdinalIgnoreCase)); // If for some reason this package doesn't have NuGet.exe then we don't want to use it if (file == null) { throw new CommandLineException(LocalizedResourceManager.GetString("UpdateCommandUnableToLocateNuGetExe")); } // Get the exe path and move it to a temp file (NuGet.exe.old) so we can replace the running exe with the bits we got // from the package repository string renamedPath = exePath + ".old"; Move(exePath, renamedPath); // Update the file UpdateFile(exePath, file); Console.WriteLine(LocalizedResourceManager.GetString("UpdateCommandUpdateSuccessful")); } }