Esempio n. 1
0
        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()))));
        }
Esempio n. 2
0
        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))));;
        }