48 lines
1.8 KiB
C#
48 lines
1.8 KiB
C#
namespace UnrealSharpBuildTool.Actions;
|
|
|
|
public class GenerateSolution : BuildToolAction
|
|
{
|
|
public override bool RunAction()
|
|
{
|
|
using BuildToolProcess generateSln = new BuildToolProcess();
|
|
|
|
// Create a solution.
|
|
generateSln.StartInfo.ArgumentList.Add("new");
|
|
generateSln.StartInfo.ArgumentList.Add("sln");
|
|
|
|
// Assign project name to the solution.
|
|
generateSln.StartInfo.ArgumentList.Add("-n");
|
|
generateSln.StartInfo.ArgumentList.Add(Program.GetProjectNameAsManaged());
|
|
generateSln.StartInfo.WorkingDirectory = Program.GetScriptFolder();
|
|
|
|
// Force the creation of the solution.
|
|
generateSln.StartInfo.ArgumentList.Add("--force");
|
|
generateSln.StartBuildToolProcess();
|
|
|
|
List<string> existingProjectsList = GetExistingProjects()
|
|
.Select(x => Path.GetRelativePath(Program.GetScriptFolder(), x))
|
|
.ToList();
|
|
|
|
GenerateProject.AddProjectToSln(existingProjectsList);
|
|
return true;
|
|
}
|
|
|
|
private static IEnumerable<string> GetExistingProjects()
|
|
{
|
|
var scriptsDirectory = new DirectoryInfo(Program.GetScriptFolder());
|
|
var pluginsDirectory = new DirectoryInfo(Program.GetPluginsFolder());
|
|
return FindCSharpProjects(scriptsDirectory)
|
|
.Concat(pluginsDirectory.EnumerateFiles("*.uplugin", SearchOption.AllDirectories)
|
|
.Select(x => x.Directory)
|
|
.SelectMany(x => x!.EnumerateDirectories("Script"))
|
|
.SelectMany(FindCSharpProjects))
|
|
.Select(x => x.FullName);
|
|
}
|
|
|
|
private static IEnumerable<FileInfo> FindCSharpProjects(DirectoryInfo directoryInfo)
|
|
{
|
|
IEnumerable<FileInfo> files = directoryInfo.EnumerateFiles("*.csproj", SearchOption.AllDirectories);
|
|
return files;
|
|
}
|
|
}
|