private void GenerateAllPlatformsSolution(string solutionFileName, IEnumerable<ProjectFileConfiguration> projectFileConfigurations)
{
var session = new Dictionary<string, object>();
Console.WriteLine("...generating all-platforms solution file solutionFileName", solutionFileName);
// use an AWSSDK prefix on project names so as to not collect any user-created projects (unless they
// chose to use our naming pattern)
const string awssdkProjectFileNamePattern = "AWSSDK.*.csproj";
var sdkSourceFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.SourceSubFoldername);
var coreProjects = new List<Project>();
var coreProjectsRoot = Path.Combine(sdkSourceFolder, GeneratorDriver.CoreSubFoldername);
foreach (var projectFile in Directory.GetFiles(coreProjectsRoot, awssdkProjectFileNamePattern, SearchOption.TopDirectoryOnly))
{
coreProjects.Add(CoreProjectFromFile(projectFile));
}
var serviceSolutionFolders = new List<ServiceSolutionFolder>();
var serviceProjectsRoot = Path.Combine(sdkSourceFolder, GeneratorDriver.ServicesSubFoldername);
foreach (var servicePath in Directory.GetDirectories(serviceProjectsRoot))
{
var di = new DirectoryInfo(servicePath);
var folder = ServiceSolutionFolderFromPath(di.Name);
foreach (var projectFile in Directory.GetFiles(servicePath, awssdkProjectFileNamePattern, SearchOption.TopDirectoryOnly))
{
folder.Projects.Add(ServiceProjectFromFile(di.Name, projectFile));
}
serviceSolutionFolders.Add(folder);
}
var testProjects = new List<Project>
{
GeneratorLibProject
};
var sdkTestsFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.TestsSubFoldername);
foreach (var testFoldername in new[] { GeneratorDriver.CommonTestSubFoldername, GeneratorDriver.UnitTestsSubFoldername, GeneratorDriver.IntegrationTestsSubFolderName })
{
var testsFolder = Path.Combine(sdkTestsFolder, testFoldername);
foreach (var projectFile in Directory.GetFiles(testsFolder, awssdkProjectFileNamePattern, SearchOption.TopDirectoryOnly))
{
testProjects.Add(TestProjectFromFile(testFoldername, projectFile));
}
}
foreach(var pfc in projectFileConfigurations)
{
AddExtraTestProjects(pfc, _allProjects, testProjects);
}
// as we are processing _allProjects, construct the set of distinct build configurations at the end
var distinctConfigurations = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var projectKey in _allProjects.Keys)
{
foreach (var cp in _allProjects[projectKey].ConfigurationPlatforms)
{
distinctConfigurations.Add(cp);
}
}
var configurationsList = distinctConfigurations.ToList();
configurationsList.Sort();
session["AllProjects"] = _allProjects;
session["CoreProjects"] = coreProjects;
session["ServiceSolutionFolders"] = serviceSolutionFolders;
session["TestProjects"] = testProjects;
session["Configurations"] = configurationsList;
var generator = new SolutionFileGenerator { Session = session };
var content = generator.TransformText();
GeneratorDriver.WriteFile(Options.SdkRootFolder, null, solutionFileName, content, true, false);
}