MSBuild: определить конфигурацию сборки подпроектов в BuildEngine
Я использую BuildEngine в качестве шага для создания среды сборки в один клик. Код следующий:
Engine engine = new Engine();
FileLogger logger = new FileLogger { Parameters = @"logfile=C:\builds\build.log" };
engine.RegisterLogger(logger);
var project = new Project(engine);
project.Load("Example.csproj");
project.SetProperty("Configuration", "Release");
bool success = project.Build();
И он, кажется, построить пример проекта с конфигурацией выпуска. Но когда я смотрю на build.log, все зависимости проекта Example были собраны как отладочные.
Есть ли способ заставить его построить все зависимости от релиза?
2 ответа
Установите глобальные свойства на движке:
BuildPropertyGroup bpg = new BuildPropertyGroup ();
bpg.SetProperty ("Configuration", "Release");
engine.GlobalProperties = bpg;
Они переопределят свойства, установленные самим проектом.
Класс двигателя устарел.
Вместо этого используйте http://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.projectcollection.aspx. Он позволяет передавать глобальные свойства, как при вызове msbuild из командной строки.
Я должен предупредить вас, что msbuild ест много памяти. У меня есть бот на сборочной машине, работающей как сервис. Когда он получает команду на сборку, он создает новый процесс и вызывает Build(). Иногда использование памяти достигает 2 ГБ (наша сборка огромна). Когда вы вызываете MSBuild из командной строки, он освобождает память гораздо эффективнее.
Попробуйте протестировать 2 реализации - бросить API и запустить вызов MSBuild.exe - в цикле. Может быть, в MSBuild 4.0 MS решила эти проблемы с памятью.