Добавочная сборка с помощью MSBuild.exe

Я создаю решение Visual Studio 2010 через Python с вызовом подпроцесса. При вызове непосредственно из командной строки для запуска devenv.com требуется ~ 15 секунд. Но при вызове из Python это подскакивает до ~ 1,5 минут.

Естественно, я надеюсь убрать это мертвое время из нашей сборки. Поэтому я решил протестировать MSBuild.exe (из .NET 4). Похоже, MSBuild.exe запускается мгновенно. Но ... похоже, что каждый раз он выполняет полную сборку, а не инкрементную.

Я использую команду

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "C:\path\to\my\project.sln" /target:build /maxcpucount:8 /property:Configuration=Release

Похоже, это должно поддерживать инкрементную сборку. Но я видел в сети сообщения о том, что msbuild может не поддерживать такую ​​инкрементную сборку.

Это возможно? Если да, то что я делаю не так?

Обновлять:

Я прочитал об этом немного больше. На основе

http://msdn.microsoft.com/en-us/library/ms171483.aspx

и

http://www.digitallycreated.net/Blog/67/incremental-builds-in-msbuild-and-how-to-avoid-breaking-them

Похоже, мне нужны свойства ввода и вывода, установленные в моих файлах .vcxproj. Проверяю мои файлы, они действительно отсутствуют.

Когда они будут созданы? Большинство моих файлов .vcxproj были преобразованы из Visual Studio 2008. Но я также создал новый проект, в котором также отсутствуют свойства ввода и вывода.

VS2010 не создает проекты с этими свойствами?

Обновление: с тех пор мы обновились до VS 2013. Теперь msbuild поддерживает инкрементные сборки. Так и не разобрался в проблеме VS 2010.


person Shane Gannon    schedule 05.11.2014    source источник
comment
Где вы видели информацию о том, что MSBuild не поддерживает инкрементную сборку? Не могли бы вы опубликовать URL или указатели, как их найти?   -  person seva titov    schedule 06.11.2014
comment
Это сообщение, которое я нашел. social.msdn.microsoft.com/Forums/vstudio/en-US/. То, что заставило меня подумать, что инкрементная сборка не поддерживается, заключалось в том, что ни MsBuild как система, ни MSBuild как задача не предоставляют средства для определения входных и выходных данных, касающихся строящегося .sln .. Но мне неясно, насколько точно это утверждение является. Отсюда и этот вопрос.   -  person Shane Gannon    schedule 06.11.2014


Ответы (1)


Я думаю, что тот факт, что инкрементные сборки не поддерживаются, является ложным утверждением, согласно официальным источникам, Управляемая инкрементная сборка, эта функция была включена в VS2010 SP1

Мы впервые представили функцию управляемой инкрементной сборки в VS2008. В VS2010 мы не смогли повторно реализовать функцию управляемой инкрементной сборки с перемещением системы сборки на MSBuild. Мы получили сильные запросы клиентов на эту функцию. В результате мы повторно реализовали эту функцию, и она включена в VS2010 SP1.

Другие решения, которые я нашел в Интернете

  • Проекты уже должны строиться постепенно (просто убедитесь, что вы выполняете сборку вместо перестройки). Лучший способ проверить, работает ли добавочная сборка, - запустить сборку из командной строки. Во второй раз это займет почти мгновение.

    Если что-то все еще восстанавливается, возможно, вы каким-то образом изменили свои проекты, что нарушает порядок сборки. Просмотр журналов сборки (с помощью параметра / v) может помочь вам понять, что происходит.

  • Другая причина, которая может вызвать проблемы с инкрементальной сборкой, - это GenerateResource.TrackFileAccess PropertyЭтот API поддерживает инфраструктуру .NET Framework и не предназначен для использования непосредственно из вашего кода. Получает или задает переключатель, указывающий, следует ли отслеживать шаблоны доступа к файлам.
person Heisenberg    schedule 17.02.2015
comment
Аааа .... это имеет смысл. У меня не было Service Pack 1. Какая необычная функция не была включена в первоначальный выпуск. - person Shane Gannon; 18.02.2015
comment
@ShaneGannon согласился :)! - person Heisenberg; 18.02.2015