public override Task <DiagnosticResult> Examine(SharedState history) { string sdkVersion; if (!history.TryGetEnvironmentVariable("DOTNET_SDK_VERSION", out sdkVersion)) { sdkVersion = SdkVersion; } var workloadManager = new DotNetWorkloadManager(SdkRoot, sdkVersion, NuGetPackageSources); var sdkPacks = workloadManager.GetAllInstalledWorkloadPacks(); var missingPacks = new List <Manifest.DotNetSdkPack>(); foreach (var rp in GetAllRequiredPacks(history)) { Util.Log($"Looking for pack: {rp.Id} ({rp.Version})"); if (!sdkPacks.Any(sp => sp.Id == rp.Id && sp.Version == rp.Version) && !workloadManager.TemplateExistsOnDisk(rp.Id, rp.Version, rp.PackKind, rp.TemplateShortName) && !workloadManager.PackExistsOnDisk(rp.Id, rp.Version)) { ReportStatus($"{rp.Id} ({rp.Version}) not installed.", Status.Warning); missingPacks.Add(rp); } else { ReportStatus($"{rp.Id} ({rp.Version}) installed.", Status.Ok); } } if (!missingPacks.Any()) { return(Task.FromResult(DiagnosticResult.Ok(this))); } var remedies = missingPacks .Select(ms => new DotNetPackInstallSolution(SdkRoot, sdkVersion, ms, NuGetPackageSources)); return(Task.FromResult(new DiagnosticResult( Status.Error, this, new Suggestion("Install Missing SDK Packs", remedies.ToArray())))); }
public override async Task <Diagonosis> Examine(PatientHistory history) { var sdkPacks = workloadManager.GetAllInstalledWorkloadPacks(); var missingPacks = new List <NuGetPackage>(); var requiredPacks = new List <NuGetPackage>(); requiredPacks.AddRange(RequiredPacks); if (history.TryGetNotes <WorkloadResolver.PackInfo[]>("dotnetworkloads", "required_packs", out var p) && p.Any()) { requiredPacks.AddRange(p.Select(pi => new NuGetPackage { Id = pi.Id, Version = pi.Version })); } var uniqueRequiredPacks = requiredPacks .GroupBy(p => p.Id + p.Version.ToString()) .Select(g => g.First()); foreach (var rp in uniqueRequiredPacks) { if (!sdkPacks.Any(sp => sp.Id == rp.Id && sp.Version == rp.Version)) { ReportStatus($"{rp.Id} ({rp.Version}) not installed.", Status.Warning); missingPacks.Add(rp); } else { ReportStatus($"{rp.Id} ({rp.Version}) installed.", Status.Ok); } } if (!missingPacks.Any()) { return(Diagonosis.Ok(this)); } return(new Diagonosis( Status.Error, this, new Prescription("Install Missing SDK Packs", new DotNetPackInstallRemedy(SdkRoot, SdkVersion, missingPacks.ToArray(), NuGetPackageSources))));; }