/// <summary> /// Updates the global.json entries for tools.dotnet and sdk.version if they are older than an incoming version /// </summary> /// <param name="incomingDotnetVersion">version to compare against</param> /// <param name="repoGlobalJson">Global.Json file to update</param> /// <returns>Updated global.json file if was able to update, or the unchanged global.json if unable to</returns> private GitFile UpdateDotnetVersionGlobalJson(SemanticVersion incomingDotnetVersion, GitFile repoGlobalJson) { string repoGlobalJsonContent = repoGlobalJson.ContentEncoding == ContentEncoding.Base64 ? _gitClient.GetDecodedContent(repoGlobalJson.Content) : repoGlobalJson.Content; try { JObject parsedGlobalJson = JObject.Parse(repoGlobalJsonContent); if (SemanticVersion.TryParse(parsedGlobalJson.SelectToken("tools.dotnet").ToString(), out SemanticVersion repoDotnetVersion)) { if (repoDotnetVersion.CompareTo(incomingDotnetVersion) < 0) { parsedGlobalJson["tools"]["dotnet"] = incomingDotnetVersion.ToNormalizedString(); // Also update and keep sdk.version in sync. JToken sdkVersion = parsedGlobalJson.SelectToken("sdk.version"); if (sdkVersion != null) { parsedGlobalJson["sdk"]["version"] = incomingDotnetVersion.ToNormalizedString(); } return(new GitFile(VersionFiles.GlobalJson, parsedGlobalJson)); } return(repoGlobalJson); } else { _logger.LogError("Could not parse the repo's dotnet version from the global.json. Skipping update to dotnet version sections"); return(repoGlobalJson); } } catch (Exception ex) { _logger.LogError(ex, "Failed to update Dotnet version for global.json. Skipping update to version sections."); return(repoGlobalJson); } }