TeamCity.CSharpInteractive/NuGetService.cs (66 lines of code) (raw):

// ReSharper disable ClassNeverInstantiated.Global namespace TeamCity.CSharpInteractive; using HostApi; internal class NuGetService : INuGet { private readonly ILog<NuGetService> _log; private readonly IFileSystem _fileSystem; private readonly IEnvironment _environment; private readonly INuGetEnvironment _nugetEnvironment; private readonly INuGetRestoreService _nugetRestoreService; private readonly INuGetAssetsReader _nugetAssetsReader; private readonly ICleaner _cleaner; public NuGetService( ILog<NuGetService> log, IFileSystem fileSystem, IEnvironment environment, INuGetEnvironment nugetEnvironment, INuGetRestoreService nugetRestoreService, INuGetAssetsReader nugetAssetsReader, ICleaner cleaner) { _log = log; _fileSystem = fileSystem; _environment = environment; _nugetEnvironment = nugetEnvironment; _nugetRestoreService = nugetRestoreService; _nugetAssetsReader = nugetAssetsReader; _cleaner = cleaner; } public IEnumerable<NuGetPackage> Restore(NuGetRestoreSettings settings) { var packagesPath = settings.PackagesPath; if (string.IsNullOrWhiteSpace(packagesPath)) { packagesPath = _nugetEnvironment.PackagesPath; } if (!_fileSystem.IsPathRooted(packagesPath)) { packagesPath = Path.Combine(_environment.GetPath(SpecialFolder.Working), packagesPath); } settings = settings.WithPackagesPath(packagesPath); if (!settings.Sources.Any()) { settings = settings.WithSources(_nugetEnvironment.Sources); } if (!settings.FallbackFolders.Any()) { settings = settings.WithFallbackFolders(_nugetEnvironment.FallbackFolders); } var restoreResult = _nugetRestoreService.TryRestore(settings, out var projectAssetsJson); if (restoreResult == false) { _log.Warning($"Cannot restore the NuGet package {settings.PackageId} {settings.VersionRange}".Trim() + '.'); return Enumerable.Empty<NuGetPackage>(); } var output = Path.GetDirectoryName(projectAssetsJson); var outputPathToken = Disposable.Empty; if (!string.IsNullOrWhiteSpace(output)) { outputPathToken = _cleaner.Track(output); } using (outputPathToken) { return _nugetAssetsReader.ReadPackages(packagesPath, projectAssetsJson); } } }