| File: Commands\New\PostActions\DotnetRestorePostActionProcessor.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.TemplateEngine.Abstractions; using Microsoft.TemplateEngine.Cli.PostActionProcessors; namespace Microsoft.DotNet.Cli.Commands.New.PostActions; internal class DotnetRestorePostActionProcessor(Func<string, bool>? restoreCallback = null) : PostActionProcessorBase { private readonly Func<string, bool> _restoreCallback = restoreCallback ?? DotnetCommandCallbacks.RestoreProject; public override Guid Id => ActionProcessorId; internal static Guid ActionProcessorId { get; } = new Guid("210D431B-A78B-4D2F-B762-4ED3E3EA9025"); protected override bool ProcessInternal(IEngineEnvironmentSettings environment, IPostAction actionConfig, ICreationEffects creationEffects, ICreationResult templateCreationResult, string outputBasePath) { bool allSucceeded = true; IEnumerable<string> targetFiles = GetConfiguredFiles(actionConfig.Args, creationEffects, "files", outputBasePath); if (!targetFiles.Any()) { //If the author didn't opt in to the new behavior by specifying "projectFiles", use the old behavior - primary outputs if (templateCreationResult.PrimaryOutputs.Count == 0) { Reporter.Output.WriteLine(CliCommandStrings.PostAction_Restore_Error_NoProjectsToRestore); return true; } targetFiles = templateCreationResult.PrimaryOutputs.Select(output => Path.GetFullPath(output.Path, outputBasePath)); } if (!targetFiles.Any()) { Reporter.Error.WriteLine(string.Format(CliCommandStrings.PostAction_Restore_Error_FailedToDetermineProjectToRestore)); return false; } foreach (string pathToRestore in targetFiles) { allSucceeded &= RestoreProject(pathToRestore); } return allSucceeded; } private bool RestoreProject(string pathToRestore) { try { Reporter.Output.WriteLine(string.Format(CliCommandStrings.PostAction_Restore_Running, pathToRestore)); bool succeeded = _restoreCallback(pathToRestore); if (!succeeded) { Reporter.Error.WriteLine(CliCommandStrings.PostAction_Restore_Failed); } else { Reporter.Output.WriteLine(CliCommandStrings.PostAction_Restore_Succeeded); } return succeeded; } catch (Exception e) { Reporter.Error.WriteLine(string.Format(CliCommandStrings.PostAction_Restore_RestoreFailed, e.Message)); return false; } } }