MSBuild: определить конфигурацию сборки подпроектов в BuildEngine - PullRequest
1 голос
/ 02 марта 2011

Я использую 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 были собраны как отладочные.

Есть ли способ заставить его построить все зависимости на Release?

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Установить глобальные свойства на движке:

BuildPropertyGroup bpg = new BuildPropertyGroup ();
bpg.SetProperty ("Configuration", "Release");
engine.GlobalProperties = bpg;

Они переопределят свойства, установленные самим проектом.

1 голос
/ 02 марта 2011

Класс Engine устарел.
Вместо этого используйте Microsoft.Build.Evaluation.ProjectCollection .Он позволяет передавать глобальные свойства, как при вызове msbuild из командной строки.

Я должен предупредить вас, что msbuild потребляет много памяти.У меня есть бот на сборочной машине, работающей как сервис.Когда он получает команду для сборки, он создает новый процесс и вызывает Build ().Иногда использование памяти достигает 2 ГБ (наша сборка огромна).Когда вы вызываете MSBuild из командной строки, он освобождает память гораздо эффективнее.

Попробуйте протестировать 2 реализации - бросить API и запустить вызов MSBuild.exe - в цикле.Может быть, в MSBuild 4.0 MS решила эти проблемы с памятью.

...