public override Task <DiagnosticResult> Examine(SharedState history) { if (!history.TryGetEnvironmentVariable("DOTNET_SDK_VERSION", out var sdkVersion)) { sdkVersion = SdkVersion; } var workloadManager = new DotNetWorkloadManager(SdkRoot, sdkVersion, NuGetPackageSources); //var installedWorkloads = workloadManager.GetInstalledWorkloads(); // This is a bit of a hack where we manually check the sdk-manifests/{SDK_VERSION}/* folders // for installed workloads, and then go manually parse the manifest json // as well as look for a .nuspec file from the extracted nupkg when it was installed // the nuspec file contains the version we actually care about for now since the manifest json // has a long number which is meaningless right now and will eventually be changed to a string // when that happens we can use the actual resolver's method to get installed workload info var installedPackageWorkloads = workloadManager.GetInstalledWorkloads(); var missingWorkloads = new List <Manifest.DotNetWorkload>(); foreach (var rp in RequiredWorkloads) { if (!NuGetVersion.TryParse(rp.Version, out var rpVersion)) { rpVersion = new NuGetVersion(0, 0, 0); } // TODO: Eventually check actual workload resolver api for installed workloads and // compare the manifest version once it has a string in it if (!installedPackageWorkloads.Any(ip => ip.id.Equals(rp.Id, StringComparison.OrdinalIgnoreCase) && NuGetVersion.TryParse(ip.version, out var ipVersion) && ipVersion == rpVersion)) { ReportStatus($"{rp.Id} ({rp.PackageId} : {rp.Version}) not installed.", Status.Error); missingWorkloads.Add(rp); }
public override async Task <Diagonosis> Examine(PatientHistory history) { var installedWorkloads = workloadManager.GetInstalledWorkloads(); var missingWorkloads = new List <Manifest.DotNetWorkload>(); var requiredPacks = new List <WorkloadResolver.PackInfo>(); foreach (var rp in RequiredWorkloads) { if (!installedWorkloads.Any(sp => sp == rp.Id)) { ReportStatus($"{rp.Id} not installed.", Status.Error); missingWorkloads.Add(rp); } else { ReportStatus($"{rp.Id} installed.", Status.Ok); var workloadPacks = workloadManager.GetPacksInWorkload(rp.Id); if (workloadPacks != null && workloadPacks.Any()) { foreach (var wp in workloadPacks) { if (!(rp.IgnoredPackIds?.Any(ip => ip.Equals(wp.Id, StringComparison.OrdinalIgnoreCase)) ?? false)) { requiredPacks.Add(wp); } } } } } if (requiredPacks.Any()) { history.AddNotes(this, "required_packs", requiredPacks.ToArray()); } if (!missingWorkloads.Any()) { return(Diagonosis.Ok(this)); } return(new Diagonosis( Status.Error, this, new Prescription("Install Missing SDK Workloads", new DotNetWorkloadInstallRemedy(SdkRoot, SdkVersion, missingWorkloads.ToArray(), NuGetPackageSources)))); }
public override async Task <DiagnosticResult> Examine(SharedState history) { if (!history.TryGetEnvironmentVariable("DOTNET_SDK_VERSION", out var sdkVersion)) { sdkVersion = SdkVersion; } var force = history.TryGetEnvironmentVariable("DOTNET_FORCE", out var forceDotNet) && (forceDotNet?.Equals("true", StringComparison.OrdinalIgnoreCase) ?? false) && !wasForceRunAlready; // Don't allow multiple force runs, just the first if (force) { wasForceRunAlready = true; } var workloadManager = new DotNetWorkloadManager(SdkRoot, sdkVersion, NuGetPackageSources); var installedPackageWorkloads = workloadManager.GetInstalledWorkloads(); var missingWorkloads = new List <Manifest.DotNetWorkload>(); foreach (var rp in RequiredWorkloads) { if (!NuGetVersion.TryParse(rp.Version, out var rpVersion)) { rpVersion = new NuGetVersion(0, 0, 0); } // TODO: Eventually check actual workload resolver api for installed workloads and // compare the manifest version once it has a string in it if (!installedPackageWorkloads.Any(ip => ip.id.Equals(rp.Id, StringComparison.OrdinalIgnoreCase) && NuGetVersion.TryParse(ip.version, out var ipVersion) && ipVersion == rpVersion)) { ReportStatus($"{rp.Id} ({rp.PackageId} : {rp.Version}) not installed.", Status.Error); missingWorkloads.Add(rp); }
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 installedWorkloads = workloadManager.GetInstalledWorkloads(); var installedPackageWorkloads = workloadManager.GetInstalledWorkloadNuGetPackages(); var missingWorkloads = new List <Manifest.DotNetWorkload>(); var requiredPacks = new List <WorkloadResolver.PackInfo>(); foreach (var rp in RequiredWorkloads) { NuGetVersion rpVersion; if (!NuGetVersion.TryParse(rp.Version, out rpVersion)) { rpVersion = new NuGetVersion(0, 0, 0); } if (!installedPackageWorkloads.Any(sp => sp.packageId.Equals(rp.PackageId, StringComparison.OrdinalIgnoreCase) && sp.packageVersion == rpVersion) || !installedWorkloads.Any(sp => sp.id.Equals(rp.Id, StringComparison.OrdinalIgnoreCase))) { ReportStatus($"{rp.Id} ({rp.PackageId} : {rp.Version}) not installed.", Status.Error); missingWorkloads.Add(rp); } else { ReportStatus($"{rp.Id} ({rp.PackageId} : {rp.Version}) installed.", Status.Ok); var workloadPacks = workloadManager.GetPacksInWorkload(rp.Id); if (workloadPacks != null && workloadPacks.Any()) { foreach (var wp in workloadPacks) { if (!(rp.IgnoredPackIds?.Any(ip => ip.Equals(wp.Id, StringComparison.OrdinalIgnoreCase)) ?? false)) { requiredPacks.Add(wp); } } } } } if (requiredPacks.Any()) { history.ContributeState(this, "required_packs", requiredPacks.ToArray()); } if (!missingWorkloads.Any()) { return(Task.FromResult(DiagnosticResult.Ok(this))); } var remedies = missingWorkloads .Select(mw => new DotNetWorkloadInstallSolution(SdkRoot, sdkVersion, mw, NuGetPackageSources)); return(Task.FromResult(new DiagnosticResult( Status.Error, this, new Suggestion("Install Missing SDK Workloads", remedies.ToArray())))); }