Skip to content

Commit

Permalink
add project to a solution directory for "add projects to a solution" …
Browse files Browse the repository at this point in the history
…post action (dotnet#2551)

* fixes dotnet/templating#2274: adds possibility to add project to a solution directory for "add projects to a solution" post action
  • Loading branch information
vlada-shubina authored Oct 19, 2020
1 parent 7cefaaf commit 2e052c2
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 15 deletions.
13 changes: 12 additions & 1 deletion src/Microsoft.TemplateEngine.Cli/Dotnet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;

namespace Microsoft.TemplateEngine.Cli
{
Expand All @@ -15,6 +17,9 @@ public class Dotnet
private DataReceivedEventHandler _outputDataReceived;
private bool _anyNonEmptyStderrWritten;

public string Command => string.Concat(_info.FileName, " ", _info.Arguments);


public static Dotnet Restore(params string[] args)
{
return new Dotnet
Expand Down Expand Up @@ -67,7 +72,7 @@ public static Dotnet AddPackageReference(string projectFile, string packageName,
};
}

public static Dotnet AddProjectsToSolution(string solutionFile, IReadOnlyList<string> projects)
public static Dotnet AddProjectsToSolution(string solutionFile, IReadOnlyList<string> projects, string solutionFolder = "")
{
List<string> allArgs = new List<string>()
{
Expand All @@ -76,6 +81,12 @@ public static Dotnet AddProjectsToSolution(string solutionFile, IReadOnlyList<st
"add"
};

if (!string.IsNullOrWhiteSpace(solutionFolder))
{
allArgs.Add("--solution-folder");
allArgs.Add(solutionFolder);
}

allArgs.AddRange(projects);
string argString = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(allArgs);

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions src/Microsoft.TemplateEngine.Cli/LocalizableStrings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -536,18 +536,19 @@ Run 'dotnet {1} --show-aliases' with no args to show all aliases.</value>
<value>Unable to automatically add the framework reference {0} to the project. Manually edit the project file to add it.</value>
</data>
<data name="AddProjToSlnPostActionFailed" xml:space="preserve">
<value>Failed to add project(s) {0} to solution file {1}</value>
<value>Failed to add project(s) {0} to solution file {1}, solution folder {2}.</value>
</data>
<data name="AddProjToSlnPostActionNoProjFiles" xml:space="preserve">
<value>Add project reference to solution action is not configured correctly in the template. Unable to determine the project files to add.</value>
</data>
<data name="AddProjToSlnPostActionRunning" xml:space="preserve">
<value>Adding project reference(s) to solution file. Running dotnet sln {0} add {1}</value>
<value>Adding project reference(s) to solution file. Running {0}</value>
</data>
<data name="AddProjToSlnPostActionSucceeded" xml:space="preserve">
<value>Successfully added
project(s): {0}
to solution file: {1}</value>
to solution file: {1}
solution folder: {2}</value>
</data>
<data name="AddProjToSlnPostActionUnresolvedSlnFile" xml:space="preserve">
<value>Unable to determine which solution file to add the reference to.</value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,23 @@ public bool Process(IEngineEnvironmentSettings environment, IPostAction actionCo
return false;
}

Dotnet addProjToSlnCommand = Dotnet.AddProjectsToSolution(nearestSlnFilesFould[0], projectFiles);
string solutionFolder = GetSolutionFolder(actionConfig);
Dotnet addProjToSlnCommand = Dotnet.AddProjectsToSolution(nearestSlnFilesFould[0], projectFiles, GetSolutionFolder(actionConfig));
addProjToSlnCommand.CaptureStdOut();
addProjToSlnCommand.CaptureStdErr();
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionRunning, nearestSlnFilesFould[0], string.Join(" ", projectFiles)));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionRunning, addProjToSlnCommand.Command));
Dotnet.Result commandResult = addProjToSlnCommand.Execute();

if (commandResult.ExitCode != 0)
{
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionFailed, string.Join(" ", projectFiles), nearestSlnFilesFould[0]));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionFailed, string.Join(" ", projectFiles), nearestSlnFilesFould[0], solutionFolder));
environment.Host.LogMessage(string.Format(LocalizableStrings.CommandOutput, commandResult.StdOut + Environment.NewLine + Environment.NewLine + commandResult.StdErr));
environment.Host.LogMessage(string.Empty);
return false;
}
else
{
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionSucceeded, string.Join(" ", projectFiles), nearestSlnFilesFould[0]));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionSucceeded, string.Join(" ", projectFiles), nearestSlnFilesFould[0], solutionFolder));
return true;
}
}
Expand Down Expand Up @@ -168,25 +169,35 @@ public bool Process(IEngineEnvironmentSettings environment, IPostAction action,
return Process(environment, action, templateCreationResult, outputBasePath);
}

Dotnet addProjToSlnCommand = Dotnet.AddProjectsToSolution(nearestSlnFilesFould[0], projectFiles);
string solutionFolder = GetSolutionFolder(action);
Dotnet addProjToSlnCommand = Dotnet.AddProjectsToSolution(nearestSlnFilesFould[0], projectFiles, solutionFolder);
addProjToSlnCommand.CaptureStdOut();
addProjToSlnCommand.CaptureStdErr();
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionRunning, nearestSlnFilesFould[0], string.Join(" ", projectFiles)));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionRunning, addProjToSlnCommand.Command));
Dotnet.Result commandResult = addProjToSlnCommand.Execute();

if (commandResult.ExitCode != 0)
{
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionFailed, string.Join(" ", projectFiles), nearestSlnFilesFould[0]));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionFailed, string.Join(" ", projectFiles), nearestSlnFilesFould[0], solutionFolder));
environment.Host.LogMessage(string.Format(LocalizableStrings.CommandOutput, commandResult.StdOut + Environment.NewLine + Environment.NewLine + commandResult.StdErr));
environment.Host.LogMessage(string.Empty);
return false;
}
else
{
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionSucceeded, string.Join(" ", projectFiles), nearestSlnFilesFould[0]));
environment.Host.LogMessage(string.Format(LocalizableStrings.AddProjToSlnPostActionSucceeded, string.Join(" ", projectFiles), nearestSlnFilesFould[0], solutionFolder));
return true;
}

}

private string GetSolutionFolder(IPostAction actionConfig)
{
if (actionConfig.Args != null && actionConfig.Args.TryGetValue("solutionFolder", out string solutionFolder))
{
return solutionFolder;
}
return string.Empty;
}
}
}

0 comments on commit 2e052c2

Please sign in to comment.