TeamCity.CSharpInteractive/NuGetReferenceResolver.cs (61 lines of code) (raw):

// ReSharper disable ClassNeverInstantiated.Global namespace TeamCity.CSharpInteractive; using HostApi; using NuGet.Versioning; internal class NuGetReferenceResolver : INuGetReferenceResolver { private readonly ILog<NuGetReferenceResolver> _log; private readonly INuGetEnvironment _nugetEnvironment; private readonly INuGetRestoreService _nugetRestoreService; private readonly INuGetAssetsReader _nugetAssetsReader; private readonly ICleaner _cleaner; public NuGetReferenceResolver( ILog<NuGetReferenceResolver> log, INuGetEnvironment nugetEnvironment, INuGetRestoreService nugetRestoreService, INuGetAssetsReader nugetAssetsReader, ICleaner cleaner) { _log = log; _nugetEnvironment = nugetEnvironment; _nugetRestoreService = nugetRestoreService; _nugetAssetsReader = nugetAssetsReader; _cleaner = cleaner; } public bool TryResolveAssemblies(string packageId, VersionRange? versionRange, out IReadOnlyCollection<ReferencingAssembly> assemblies) { var result = new List<ReferencingAssembly>(); assemblies = result; var packageName = $"{packageId} {versionRange}".Trim(); _log.Info(new[] {new Text($"Restoring package {packageName}.", Color.Highlighted)}); var restoreResult = _nugetRestoreService.TryRestore( new NuGetRestoreSettings( packageId, _nugetEnvironment.Sources, _nugetEnvironment.FallbackFolders, versionRange, default, _nugetEnvironment.PackagesPath ), out var projectAssetsJson); if (!restoreResult) { return false; } var output = Path.GetDirectoryName(projectAssetsJson); var outputPathToken = Disposable.Empty; if (!string.IsNullOrWhiteSpace(output)) { outputPathToken = _cleaner.Track(output); } using (outputPathToken) { _log.Trace(() => new Text("Assemblies referenced:")); foreach (var assembly in _nugetAssetsReader.ReadReferencingAssemblies(projectAssetsJson)) { _log.Trace(() => new []{ Text.Tab, new Text(assembly.Name) }); result.Add(assembly); } } return true; } }