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 решила эти проблемы с памятью.

Другие вопросы по тегам