| File: Commands\New\OptionalWorkloadProvider.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Configurer; using Microsoft.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Abstractions.TemplatePackage; namespace Microsoft.DotNet.Cli.Commands.New; internal class OptionalWorkloadProvider : ITemplatePackageProvider { private readonly IEngineEnvironmentSettings _environmentSettings; internal OptionalWorkloadProvider(ITemplatePackageProviderFactory factory, IEngineEnvironmentSettings settings) { Factory = factory; _environmentSettings = settings; } public ITemplatePackageProviderFactory Factory { get; } // To avoid warnings about being unused, implement empty add/remove accessors. event Action? ITemplatePackageProvider.TemplatePackagesChanged { add { } remove { } } public Task<IReadOnlyList<ITemplatePackage>> GetAllTemplatePackagesAsync(CancellationToken cancellationToken) { var list = new List<TemplatePackage>(); var optionalWorkloadLocator = new TemplateLocator.TemplateLocator(); var sdksDirectory = new DirectoryInfo(MSBuildForwardingAppWithoutLogging.GetMSBuildSDKsPath()); var sdkDirectory = sdksDirectory?.Parent; var sdkVersion = sdkDirectory?.Name; var dotnetRootPath = sdkDirectory?.Parent?.Parent; string userProfileDir = CliFolderPathCalculator.DotnetUserProfileFolderPath; var packages = optionalWorkloadLocator.GetDotnetSdkTemplatePackages(sdkVersion, dotnetRootPath?.FullName, userProfileDir); var fileSystem = _environmentSettings.Host.FileSystem; foreach (var packageInfo in packages) { list.Add(new TemplatePackage(this, packageInfo.Path, fileSystem.GetLastWriteTimeUtc(packageInfo.Path))); } return Task.FromResult<IReadOnlyList<ITemplatePackage>>(list); } }