Построение решения из кода с использованием BuildManager.Build()
Я попытался создать приложение сервера сборки, которое получит исходный код и встроит его в исполняемые файлы и библиотеки DLL. Мое решение довольно большое, содержит несколько проектов в зависимости от других проектов из того же решения. Сборка в VS длится в версии Release ок. 10mins. Так что, вероятно, единственный способ сделать это - создать их как одно решение. Вот код, который я запускаю (как можно точнее, я пытаюсь его восстановить):
var props = new Dictionary<string, string>();
props["Configuration"] = "Release";
var request = new BuildRequestData(solutionFullPath, props, null, new string[] { "Build" }, null);
var parms = new BuildParameters();
var buildManager = BuildManager.DefaultBuildManager;
var logger = new FileLogger() { Parameters = @"logfile=C:\temp\build.log" };
parms.Loggers = new List<ILogger>() { logger };
parms.DetailedSummary = true;
var result = buildManager.Build(parms, request);
Проблема в последней строке, этот звонок никогда не заканчивается (я ждал час).
Я также попробовал другой подход, просто пытаясь построить один проект:
var logger = new FileLogger() { Parameters = @"logfile=C:\temp\build.log" };
var projectInstance = new ProjectInstance(solutionFullPath);
projectInstance.SetProperty("Configuration", "Release");
projectInstance.Build(new List<ILogger>() { logger });
Результат был таким же, хотя. Процесс выполняется и использует все больше и больше оперативной памяти (увеличение использования довольно медленное, 1 МБ / 5-10 с). Через час было ок. 0,5 ГБ в памяти. Когда я останавливаю его перед методом Build() и запускаю, в диспетчере задач не создается новый процесс, поэтому он, вероятно, не вызывает msbuild.exe. Файл журнала создан, но в нем нет ни одной строки, он имеет ровно ноль байтов. Каталоги bin или obj не создаются, все выглядит так, как будто метод Build() не изменился.
Я зашел в тупик, не знаю, что проверять, не знаю, что делать.
У кого-нибудь есть какой-нибудь совет / решение этой проблемы? Я действительно оценил бы любой совет, приводящий к решению моей проблемы.