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;
 | 
						|
    }
 | 
						|
}
 |