private void GenerateCombinedSolution(string solutionFileName, bool includeTests, IEnumerable<ProjectFileConfiguration> projectFileConfigurations)
{
Console.WriteLine("Generating solution file {0}", solutionFileName);
var session = new Dictionary<string, object>();
var buildConfigurations = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var solutionProjects = new Dictionary<string, ProjectFileCreator.ProjectConfigurationData>();
var sdkSourceFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.SourceSubFoldername);
var coreProjects = new List<Project>();
var coreProjectsRoot = Path.Combine(sdkSourceFolder, GeneratorDriver.CoreSubFoldername);
foreach (var pfc in projectFileConfigurations)
{
var projectTypeWildCard = string.Format("AWSSDK.*.{0}.csproj", pfc.Name);
foreach (var projectFile in Directory.GetFiles(coreProjectsRoot, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
coreProjects.Add(CoreProjectFromFile(projectFile));
SelectProjectAndConfigurationsForSolution(projectFile, solutionProjects, buildConfigurations);
}
}
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 pfc in projectFileConfigurations)
{
var projectTypeWildCard = string.Format("AWSSDK.*.{0}.csproj", pfc.Name);
foreach (var projectFile in Directory.GetFiles(servicePath, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
folder.Projects.Add(ServiceProjectFromFile(di.Name, projectFile));
SelectProjectAndConfigurationsForSolution(projectFile, solutionProjects, buildConfigurations);
}
}
serviceSolutionFolders.Add(folder);
}
var testProjects = new List<Project>();
if (includeTests)
{
foreach (var pfc in projectFileConfigurations)
{
var projectType = pfc.Name;
var projectTypeWildCard = string.Format("AWSSDK.*.{0}.csproj", pfc.Name);
var sdkTestsFolder = Path.Combine(Options.SdkRootFolder, GeneratorDriver.TestsSubFoldername);
foreach (var testFoldername in new[] { GeneratorDriver.UnitTestsSubFoldername, GeneratorDriver.IntegrationTestsSubFolderName })
{
var testFolder = Path.Combine(sdkTestsFolder, testFoldername);
foreach (var projectFile in Directory.GetFiles(testFolder, projectTypeWildCard, SearchOption.TopDirectoryOnly))
{
testProjects.Add(TestProjectFromFile(testFoldername, projectFile));
var projectKey = Path.GetFileNameWithoutExtension(projectFile);
solutionProjects.Add(projectKey, _allProjects[projectKey]);
SelectBuildConfigurationsForProject(projectKey, buildConfigurations);
}
}
if (projectType.Equals(ProjectTypes.Net35, StringComparison.Ordinal) || projectType.Equals(ProjectTypes.Net45, StringComparison.Ordinal) &&
!solutionProjects.ContainsKey(GeneratorLibProjectName))
{
solutionProjects.Add(GeneratorLibProjectName, GeneratorLibProjectConfig);
testProjects.Add(GeneratorLibProject);
SelectBuildConfigurationsForProject(GeneratorLibProjectName, buildConfigurations);
}
AddExtraTestProjects(pfc, solutionProjects, testProjects);
}
}
var configurationsList = buildConfigurations.ToList();
configurationsList.Sort();
session["AllProjects"] = solutionProjects;
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);
}