private static void InstallNugetPackageForSpecifiedVersion(IProject project, IVsPackageInstaller vsPackageInstaller, string packageId, string version) { vsPackageInstaller.InstallPackage( ServiceMatrixOverrides.GetNugetFeedServiceBaseAddress() ?? "All", project.As <EnvDTE.Project>(), packageId, version, false); }
private static void InstallLatestNugetPackage(IProject project, IVsPackageInstallerServices vsPackageInstallerServices, IVsPackageInstaller vsPackageInstaller, string packageId, int?majorVersion) { // lookup latest version for the given major (or null), and install that var latestVersion = GetLatestVersionForMajor(packageId, majorVersion); vsPackageInstaller.InstallPackage( ServiceMatrixOverrides.GetNugetFeedServiceBaseAddress() ?? "All", project.As <EnvDTE.Project>(), packageId, latestVersion, false); // Call the installed packages to get the version that was just installed and cache the version. // Packages are needed in case latestVersion is null, var installedPackages = vsPackageInstallerServices.GetInstalledPackages(); NugetPackageVersionManager.UpdateCache(packageId, majorVersion, installedPackages); }
static string GetNugetFeedServiceBaseAddress() { var overrideFeed = ServiceMatrixOverrides.GetNugetFeedServiceBaseAddress(); return(string.IsNullOrWhiteSpace(overrideFeed) ? officialNugetFeed : overrideFeed.Trim()); }
static string GetLatestVersionForMajor(string packageId, int?majorVersion) { // first check for overrides var overridenPackageVersion = ServiceMatrixOverrides.GetNugetPackageVersion(packageId); if (!string.IsNullOrEmpty(overridenPackageVersion)) { return(overridenPackageVersion); } // if no major is given, use latest if (!majorVersion.HasValue) { return(null); } using (var client = new WebClient()) { client.BaseAddress = GetNugetFeedServiceBaseAddress(); var query = string.Format( CultureInfo.InvariantCulture, @"Packages()?$filter=Id eq '{0}' and startswith(Version,'{1}.')&$orderby=Version desc", packageId, majorVersion.Value); string resultString; try { resultString = client.DownloadString(query); } catch (WebException e) { tracer.Trace(TraceEventType.Warning, e, "Could not retrieve result from feed for package {0}", packageId); return(null); } if (string.IsNullOrWhiteSpace(resultString)) { tracer.Trace(TraceEventType.Warning, null, "Retrieved empty result from feed for package {0}", packageId); return(null); } XElement xmlElement; try { xmlElement = XElement.Parse(resultString); } catch (XmlException e) { tracer.Trace(TraceEventType.Warning, e, "Retrieved invalid result from feed for package {0}", packageId); return(null); } var versionElementName = XName.Get("Version", "http://schemas.microsoft.com/ado/2007/08/dataservices"); var versions = xmlElement .Descendants(versionElementName) .Select(e => new { e.Value, Version = ParseVersion(e.Value) }) .OrderByDescending(v => v.Version); var version = versions.FirstOrDefault(v => v.Version != null); return(version != null ? version.Value : null); } }