public NuGetDownloader(TargetFramework targetFramework, string?outputDir = null,
                               bool includePrerelease       = false, bool recursive = false, bool extract = true,
                               IEnumerable <string>?sources = null)
            : base(sources)
        {
            TargetFramework = targetFramework;
            Recursive       = recursive;
            Extract         = extract;

            IncludePrerelease = includePrerelease;

            outputDir ??= Directory.GetCurrentDirectory();
            (_downloadDir, _extractDir) = extract
                ? (Path.Combine(Path.GetTempPath(), $"NuGetPackageDownloader.{Guid.NewGuid():N}"), outputDir)
                : (outputDir, null);

            _framework = targetFramework.ToNuGetFramework();
            _project   = new FolderNuGetProject(_downloadDir);

            var packageSourceProvider    = new PackageSourceProvider(Settings);
            var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, ResourceProviders);

            _packageManager = new NuGetPackageManager(sourceRepositoryProvider, Settings, _downloadDir)
            {
                PackagesFolderNuGetProject = _project,
            };
        }