private IList<string> GetCoreProjectSourceFolders(ProjectFileConfiguration projectFileConfiguration, string coreRootFolder)
{
var exclusionList = new List<string>
{
"Properties",
"bin",
"obj"
};
// Start with the standard folders for core
var sourceCodeFolders = new List<string>
{
"."
};
var childDirectories = Directory.GetDirectories(coreRootFolder, "*", SearchOption.AllDirectories);
foreach (var childDirectory in childDirectories)
{
var folder = childDirectory.Substring(coreRootFolder.Length).TrimStart('\\');
if (exclusionList.Any(e => folder.Equals(e, StringComparison.InvariantCulture) ||
folder.StartsWith(e + "\\", StringComparison.InvariantCulture)))
continue;
if (projectFileConfiguration.IsPlatformCodeFolder(folder))
{
if (projectFileConfiguration.IsValidPlatformPathForProject(folder))
sourceCodeFolders.Add(folder);
}
else
{
sourceCodeFolders.Add(folder);
}
}
//var platformSubFolders = projectFileConfiguration.PlatformCodeFolders;
//sourceCodeFolders.AddRange(platformSubFolders.Select(folder => Path.Combine(@"Generated", folder)));
//// Augment the returned folders with any custom subfolders already in existence. If the custom folder
//// ends with a recognised platform, only add it to the set if it matches the platform being generated
////if (Directory.Exists(serviceRootFolder))
//{
// var subFolders = Directory.GetDirectories(coreRootFolder, "*", SearchOption.AllDirectories);
// subFolders = subFolders.Except(exclusionList).ToArray();
// if (subFolders.Any())
// {
// foreach (var folder in subFolders)
// {
// var serviceRelativeFolder = folder.Substring(coreRootFolder.Length);
// if (!serviceRelativeFolder.StartsWith(@"\Custom", StringComparison.OrdinalIgnoreCase))
// continue;
// if (projectFileConfiguration.IsPlatformCodeFolder(serviceRelativeFolder))
// {
// if (projectFileConfiguration.IsValidPlatformCodeFolderForProject(serviceRelativeFolder))
// sourceCodeFolders.Add(serviceRelativeFolder.TrimStart('\\'));
// }
// else
// sourceCodeFolders.Add(serviceRelativeFolder.TrimStart('\\'));
// }
// }
//}
var foldersThatExist = new List<string>();
foreach (var folder in sourceCodeFolders)
{
if (Directory.Exists(Path.Combine(coreRootFolder, folder)))
foldersThatExist.Add(folder);
}
// sort so we get a predictable layout
foldersThatExist.Sort(StringComparer.OrdinalIgnoreCase);
return foldersThatExist;
}