diff --git a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet/NuGetRestorer.cs b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet/NuGetRestorer.cs index 1894c3c6fd6..a3ecd82c0e1 100644 --- a/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet/NuGetRestorer.cs +++ b/src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet/NuGetRestorer.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using Microsoft.Internal.Performance; +using Microsoft.VisualStudio.ProjectSystem.Logging; using Microsoft.VisualStudio.ProjectSystem.Properties; using Microsoft.VisualStudio.ProjectSystem.Utilities; using NuGet.SolutionRestoreManager; @@ -23,6 +24,7 @@ internal class NuGetRestorer : OnceInitializedOnceDisposedAsync private readonly IActiveConfiguredProjectsProvider _activeConfiguredProjectsProvider; private readonly IActiveConfiguredProjectSubscriptionService _activeConfiguredProjectSubscriptionService; private readonly IActiveProjectConfigurationRefreshService _activeProjectConfigurationRefreshService; + private readonly IProjectLogger _logger; private IDisposable _targetFrameworkSubscriptionLink; private DisposableBag _designTimeBuildSubscriptionLink; @@ -46,7 +48,8 @@ public NuGetRestorer( IVsSolutionRestoreService solutionRestoreService, IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService, IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService, - IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider) + IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider, + IProjectLogger logger) : base(projectVsServices.ThreadingService.JoinableTaskContext) { _projectVsServices = projectVsServices; @@ -54,6 +57,7 @@ public NuGetRestorer( _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService; _activeProjectConfigurationRefreshService = activeProjectConfigurationRefreshService; _activeConfiguredProjectsProvider = activeConfiguredProjectsProvider; + _logger = logger; } [ProjectAutoLoad(startAfter: ProjectLoadCheckpoint.ProjectFactoryCompleted)] @@ -166,6 +170,8 @@ private Task ProjectPropertyChangedAsync(Tuple { + LogProjectRestoreInfo(_projectVsServices.Project.FullPath, projectRestoreInfo); + await _solutionRestoreService .NominateProjectAsync(_projectVsServices.Project.FullPath, projectRestoreInfo, _projectVsServices.Project.Services.ProjectAsynchronousTasks.UnloadCancellationToken) @@ -173,6 +179,7 @@ await _solutionRestoreService CodeMarkers.Instance.CodeMarker(CodeMarkerTimerId.PerfPackageRestoreEnd); + CompleteLogProjectRestoreInfo(_projectVsServices.Project.FullPath); }), ProjectCriticalOperation.Build | ProjectCriticalOperation.Unload | ProjectCriticalOperation.Rename, registerFaultHandler: true); @@ -192,5 +199,91 @@ private static bool HasTargetFrameworkChanged(IProjectVersionedValue() + .Select(prop => $"{prop.Name}:{prop.Value}"); + logger.WriteLine($"{heading} -- ({string.Join(" | ", properties)})"); + } + + private void LogReferenceItems(IProjectLoggerBatch logger, string heading, ReferenceItems references) + { + logger.WriteLine(heading); + logger.IndentLevel++; + + foreach (var reference in references) + { + var properties = reference.Properties.Cast() + .Select(prop => $"{prop.Name}:{prop.Value}"); + logger.WriteLine($"{reference.Name} -- ({string.Join(" | ", properties)})"); + } + + logger.IndentLevel--; + } + + #endregion } }