豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit 6d0159e

Browse files
authored
Merge pull request #3027 from natidea/nominateLogging
Add logging for NuGetRestorer
2 parents 6316e99 + d7db794 commit 6d0159e

File tree

1 file changed

+94
-1
lines changed
  • src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet

1 file changed

+94
-1
lines changed

src/Microsoft.VisualStudio.ProjectSystem.Managed.VS/ProjectSystem/VS/NuGet/NuGetRestorer.cs

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading.Tasks;
99
using System.Threading.Tasks.Dataflow;
1010
using Microsoft.Internal.Performance;
11+
using Microsoft.VisualStudio.ProjectSystem.Logging;
1112
using Microsoft.VisualStudio.ProjectSystem.Properties;
1213
using Microsoft.VisualStudio.ProjectSystem.Utilities;
1314
using NuGet.SolutionRestoreManager;
@@ -23,6 +24,7 @@ internal class NuGetRestorer : OnceInitializedOnceDisposedAsync
2324
private readonly IActiveConfiguredProjectsProvider _activeConfiguredProjectsProvider;
2425
private readonly IActiveConfiguredProjectSubscriptionService _activeConfiguredProjectSubscriptionService;
2526
private readonly IActiveProjectConfigurationRefreshService _activeProjectConfigurationRefreshService;
27+
private readonly IProjectLogger _logger;
2628
private IDisposable _targetFrameworkSubscriptionLink;
2729
private DisposableBag _designTimeBuildSubscriptionLink;
2830

@@ -46,14 +48,16 @@ public NuGetRestorer(
4648
IVsSolutionRestoreService solutionRestoreService,
4749
IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
4850
IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
49-
IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider)
51+
IActiveConfiguredProjectsProvider activeConfiguredProjectsProvider,
52+
IProjectLogger logger)
5053
: base(projectVsServices.ThreadingService.JoinableTaskContext)
5154
{
5255
_projectVsServices = projectVsServices;
5356
_solutionRestoreService = solutionRestoreService;
5457
_activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
5558
_activeProjectConfigurationRefreshService = activeProjectConfigurationRefreshService;
5659
_activeConfiguredProjectsProvider = activeConfiguredProjectsProvider;
60+
_logger = logger;
5761
}
5862

5963
[ProjectAutoLoad(startAfter: ProjectLoadCheckpoint.ProjectFactoryCompleted)]
@@ -166,13 +170,16 @@ private Task ProjectPropertyChangedAsync(Tuple<ImmutableList<IProjectValueVersio
166170
_projectVsServices.Project.Services.ProjectAsynchronousTasks
167171
.RegisterAsyncTask(JoinableFactory.RunAsync(async () =>
168172
{
173+
LogProjectRestoreInfo(_projectVsServices.Project.FullPath, projectRestoreInfo);
174+
169175
await _solutionRestoreService
170176
.NominateProjectAsync(_projectVsServices.Project.FullPath, projectRestoreInfo,
171177
_projectVsServices.Project.Services.ProjectAsynchronousTasks.UnloadCancellationToken)
172178
.ConfigureAwait(false);
173179

174180
CodeMarkers.Instance.CodeMarker(CodeMarkerTimerId.PerfPackageRestoreEnd);
175181

182+
CompleteLogProjectRestoreInfo(_projectVsServices.Project.FullPath);
176183
}),
177184
ProjectCriticalOperation.Build | ProjectCriticalOperation.Unload | ProjectCriticalOperation.Rename,
178185
registerFaultHandler: true);
@@ -192,5 +199,91 @@ private static bool HasTargetFrameworkChanged(IProjectVersionedValue<IProjectSub
192199
}
193200
return false;
194201
}
202+
203+
#region ProjectRestoreInfo Logging
204+
205+
private void LogProjectRestoreInfo(string fullPath, IVsProjectRestoreInfo projectRestoreInfo)
206+
{
207+
if (_logger.IsEnabled)
208+
{
209+
using (IProjectLoggerBatch logger = _logger.BeginBatch())
210+
{
211+
logger.WriteLine();
212+
logger.WriteLine("------------------------------------------");
213+
logger.WriteLine($"BEGIN Nominate Restore for {fullPath}");
214+
logger.IndentLevel++;
215+
216+
logger.WriteLine($"BaseIntermediatePath: {projectRestoreInfo.BaseIntermediatePath}");
217+
logger.WriteLine($"OriginalTargetFrameworks: {projectRestoreInfo.OriginalTargetFrameworks}");
218+
LogTargetFrameworks(logger, projectRestoreInfo.TargetFrameworks as TargetFrameworks);
219+
LogReferenceItems(logger, "Tool References", projectRestoreInfo.ToolReferences as ReferenceItems);
220+
221+
logger.IndentLevel--;
222+
logger.WriteLine();
223+
}
224+
}
225+
}
226+
227+
private void CompleteLogProjectRestoreInfo(string fullPath)
228+
{
229+
if (_logger.IsEnabled)
230+
{
231+
using (IProjectLoggerBatch logger = _logger.BeginBatch())
232+
{
233+
logger.WriteLine();
234+
logger.WriteLine("------------------------------------------");
235+
logger.WriteLine($"COMPLETED Nominate Restore for {fullPath}");
236+
logger.WriteLine();
237+
}
238+
}
239+
}
240+
241+
private void LogTargetFrameworks(IProjectLoggerBatch logger, TargetFrameworks targetFrameworks)
242+
{
243+
logger.WriteLine($"Target Frameworks ({targetFrameworks.Count})");
244+
logger.IndentLevel++;
245+
246+
foreach (var tf in targetFrameworks)
247+
{
248+
LogTargetFramework(logger, tf as TargetFrameworkInfo);
249+
}
250+
logger.IndentLevel--;
251+
}
252+
253+
private void LogTargetFramework(IProjectLoggerBatch logger, TargetFrameworkInfo targetFrameworkInfo)
254+
{
255+
logger.WriteLine(targetFrameworkInfo.TargetFrameworkMoniker);
256+
logger.IndentLevel++;
257+
258+
LogReferenceItems(logger, "Project References", targetFrameworkInfo.ProjectReferences as ReferenceItems);
259+
LogReferenceItems(logger, "Package References", targetFrameworkInfo.PackageReferences as ReferenceItems);
260+
LogProperties(logger, "Target Framework Properties", targetFrameworkInfo.Properties as ProjectProperties);
261+
262+
logger.IndentLevel--;
263+
}
264+
265+
private void LogProperties(IProjectLoggerBatch logger, string heading, ProjectProperties projectProperties)
266+
{
267+
var properties = projectProperties.Cast<ProjectProperty>()
268+
.Select(prop => $"{prop.Name}:{prop.Value}");
269+
logger.WriteLine($"{heading} -- ({string.Join(" | ", properties)})");
270+
}
271+
272+
private void LogReferenceItems(IProjectLoggerBatch logger, string heading, ReferenceItems references)
273+
{
274+
logger.WriteLine(heading);
275+
logger.IndentLevel++;
276+
277+
foreach (var reference in references)
278+
{
279+
var properties = reference.Properties.Cast<ReferenceProperty>()
280+
.Select(prop => $"{prop.Name}:{prop.Value}");
281+
logger.WriteLine($"{reference.Name} -- ({string.Join(" | ", properties)})");
282+
}
283+
284+
logger.IndentLevel--;
285+
}
286+
287+
#endregion
195288
}
196289
}

0 commit comments

Comments
 (0)