From 8ff03186ff518887a73093d6b9b5388eecd99d23 Mon Sep 17 00:00:00 2001 From: Jan Krivanek Date: Thu, 20 Oct 2022 14:02:15 +0200 Subject: [PATCH 1/3] Create workloads enumerator lazily in dotnet-new host --- src/Cli/dotnet/commands/dotnet-new/NewCommandParser.cs | 5 ++++- src/Cli/dotnet/commands/dotnet-new/WorkloadsInfoProvider.cs | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Cli/dotnet/commands/dotnet-new/NewCommandParser.cs b/src/Cli/dotnet/commands/dotnet-new/NewCommandParser.cs index 0a0948d5476e..74ee568e339e 100644 --- a/src/Cli/dotnet/commands/dotnet-new/NewCommandParser.cs +++ b/src/Cli/dotnet/commands/dotnet-new/NewCommandParser.cs @@ -145,7 +145,10 @@ private static CliTemplateEngineHost CreateHost(bool disableSdkTemplates, bool d builtIns.Add((typeof(ITemplateConstraintFactory), new ProjectCapabilityConstraintFactory())); builtIns.Add((typeof(MSBuildEvaluator), new MSBuildEvaluator(outputDirectory: outputPath?.FullName, projectPath: projectPath?.FullName))); } - builtIns.Add((typeof(IWorkloadsInfoProvider), new WorkloadsInfoProvider(new WorkloadInfoHelper()))); + + builtIns.Add((typeof(IWorkloadsInfoProvider), new WorkloadsInfoProvider( + new Lazy(() => new WorkloadInfoHelper()))) + ); builtIns.Add((typeof(ISdkInfoProvider), new SdkInfoProvider())); string? preferredLangEnvVar = Environment.GetEnvironmentVariable(PrefferedLangEnvVarName); diff --git a/src/Cli/dotnet/commands/dotnet-new/WorkloadsInfoProvider.cs b/src/Cli/dotnet/commands/dotnet-new/WorkloadsInfoProvider.cs index 9fcd02c735ab..2466dcadf077 100644 --- a/src/Cli/dotnet/commands/dotnet-new/WorkloadsInfoProvider.cs +++ b/src/Cli/dotnet/commands/dotnet-new/WorkloadsInfoProvider.cs @@ -16,10 +16,10 @@ namespace Microsoft.DotNet.Tools.New { internal class WorkloadsInfoProvider : IWorkloadsInfoProvider { - private readonly IWorkloadsRepositoryEnumerator _workloadsRepositoryEnumerator; + private readonly Lazy _workloadsRepositoryEnumerator; public Guid Id { get; } = Guid.Parse("{F8BA5B13-7BD6-47C8-838C-66626526817B}"); - public WorkloadsInfoProvider(IWorkloadsRepositoryEnumerator workloadsRepositoryEnumerator) + public WorkloadsInfoProvider(Lazy workloadsRepositoryEnumerator) { _workloadsRepositoryEnumerator = workloadsRepositoryEnumerator; } @@ -27,7 +27,7 @@ public WorkloadsInfoProvider(IWorkloadsRepositoryEnumerator workloadsRepositoryE public Task> GetInstalledWorkloadsAsync(CancellationToken cancellationToken) { return Task.FromResult( - _workloadsRepositoryEnumerator.InstalledAndExtendedWorkloads.Select(w => new WorkloadInfo(w.Id, w.Description)) + _workloadsRepositoryEnumerator.Value.InstalledAndExtendedWorkloads.Select(w => new WorkloadInfo(w.Id, w.Description)) ); } From edee82fbb36c331873e8df573bf18892ffd79fc6 Mon Sep 17 00:00:00 2001 From: Jan Krivanek Date: Thu, 20 Oct 2022 14:38:19 +0200 Subject: [PATCH 2/3] Fix test --- .../dotnet.Tests/dotnet-new/WorkloadsInfoProviderTests.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Tests/dotnet.Tests/dotnet-new/WorkloadsInfoProviderTests.cs b/src/Tests/dotnet.Tests/dotnet-new/WorkloadsInfoProviderTests.cs index fee37459f3a2..55f21dc9c9bd 100644 --- a/src/Tests/dotnet.Tests/dotnet-new/WorkloadsInfoProviderTests.cs +++ b/src/Tests/dotnet.Tests/dotnet-new/WorkloadsInfoProviderTests.cs @@ -14,6 +14,7 @@ using Xunit; using System.Linq; using System.Collections.Generic; +using System; namespace Microsoft.DotNet.Cli.New.Tests { @@ -44,7 +45,7 @@ public void InstalledWorkloads_ShouldReturnExpectedWorkloads() currentSdkVersion: "1.2.3", workloadRecordRepo: repoMock.Object, workloadResolver: resolverMock.Object); - IWorkloadsInfoProvider wp = new WorkloadsInfoProvider(workloadsEnumerator); + IWorkloadsInfoProvider wp = new WorkloadsInfoProvider(new Lazy(workloadsEnumerator)); // Act var workloads = wp.GetInstalledWorkloadsAsync(default).Result; From dc50375eefb1a5bbb6b86d1204d99f03ebe1f188 Mon Sep 17 00:00:00 2001 From: Jan Krivanek Date: Thu, 20 Oct 2022 18:23:41 +0200 Subject: [PATCH 3/3] Uniqification of workload installer log name --- .../dotnet-workload/install/NetSdkMsiInstallerClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cli/dotnet/commands/dotnet-workload/install/NetSdkMsiInstallerClient.cs b/src/Cli/dotnet/commands/dotnet-workload/install/NetSdkMsiInstallerClient.cs index 368d4716b184..810d7d01791b 100644 --- a/src/Cli/dotnet/commands/dotnet-workload/install/NetSdkMsiInstallerClient.cs +++ b/src/Cli/dotnet/commands/dotnet-workload/install/NetSdkMsiInstallerClient.cs @@ -946,7 +946,7 @@ public static NetSdkMsiInstallerClient Create( string tempDirPath = null, RestoreActionConfig restoreActionConfig = null) { - TimestampedFileLogger logger = new(Path.Combine(Path.GetTempPath(), $"Microsoft.NET.Workload_{DateTime.Now:yyyyMMdd_HHmmss}.log")); + TimestampedFileLogger logger = new(Path.Combine(Path.GetTempPath(), $"Microsoft.NET.Workload_{Environment.ProcessId}_{DateTime.Now:yyyyMMdd_HHmmss}.log")); InstallClientElevationContext elevationContext = new(logger); if (nugetPackageDownloader == null)