Вы можете сделать это с помощью небольшого кода или скрипта.
Visual Studio заполнит большинство GUID для вас ...
Я собрал что-то подобное вместе, чтобы сравнить проекты. Это не на 100% идеально, вы можете получить дубликаты из того, как код обрабатывает имена проектов. Надеюсь, он укажет вам путь.
Что мы делаем здесь, это устанавливаем преамбулу к файлу Solution, затем вставляем каждое решение (вам нужен guid Типа проекта, здесь видно начало FAE, но не собственный GUID Проекта, который VS вставит при сохранении файла Solution ). Там немного больше шаблона, чем мы вставляем конфигурацию сборки для каждого проекта. У меня было около 12 конфигураций для каждого проекта (разные настройки Release и Debug), но я сократил их до двух.
static void Main(string[] args)
{
if(args.Count() != 2)
{
Usage();
return;
}
var rootDir = args[0];
var output = args[1];
var files = Directory.EnumerateFiles(rootDir,
"*.*proj",
SearchOption.AllDirectories);
var configs = new StringBuilder();
var configDefs = new string[]{
".Debug|Any CPU.ActiveCfg = Debug|Any CPU",
".Release|Any CPU.ActiveCfg = Release|Any CPU",
"Other_configurations_see_solution_for_how"
};
using(var sw = new StreamWriter(output))
{
sw.WriteLine(Resources.Head);
foreach(var file in files)
{
var relpath = file.Substring(rootDir.Length + 1);
var split= relpath.Split('\\');
var name = split[0];
var path = relpath;
sw.WriteLine("Project(\"{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}\") = \"{0}\", \"{1}\", \"{0}\"", name, path);
sw.WriteLine("EndProject");
foreach(var configDef in configDefs)
{
configs.AppendLine(string.Format("{0}{1}", file, configDef));
}
}
sw.WriteLine(@"Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
...Other_configurations_see_solution_for_how...
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution");
sw.WriteLine(configs.ToString());
sw.WriteLine(Resources.Tail);
}
}
Голова выглядит примерно так:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Но я думаю, что в первой строке есть управляющие символы - будьте осторожны!
Хвост выглядит как
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal