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