1

Когда мы запускаем нашу сборку через MSBuild, в каком контексте работает MSBuild в/под?В каком контексте работает MSBUILD?

Причина, по которой я прошу, состоит в том, что я предварительно создал событие, которое вызывает программу командной строки (ajax minification), которая отлично работает, если проект построен через VS2010 (на том же компьютере), но не работает, когда наш (CCNet) строит его. Ошибка, которую я получаю, равна 9009, а это значит, что ее не удается найти файл. У программы командной строки есть путь к среде, установленный для ее местоположения (путь среды задается через setx, возможно, он установлен только для текущего пользователя?), Поэтому вызов только его имени отлично работает во всех случаях, когда CCNet вызывает MSBuild.

+0

Событие предварительной сборки выполняется классом MSBuild Exec. Выполняет команды в скрытом экземпляре cmd.exe. Рабочий каталог установлен в выходной каталог проекта, исходная среда наследуется от родительского процесса. Do * not * используйте SETX, который не будет изменять среду. Используйте SET. Используйте PATH для изменения пути. –

+0

Можете ли вы объяснить, где я должен использовать SET PATH? Я использовал SETX один раз после того, как я установил программу миниатюризации ajax. Как использовать SET PATH в событии предварительной сборки? – BlueChameleon

+1

Просто поставьте его в событие pre-build: set path = c: \ foo \ bar;% path%. –

ответ

1

MSBuild такой же, как и любой другой инструмент для разработки, он работает под любым контекстом пользователя.

Когда вы запускаете msbuild через Visual Studio, он запускается как вы, потому что в вашем контексте входа была запущена Visual Studio, которая, в свою очередь, запускала сборку.

Если вы запустите его через какую-либо услугу сборки, ответ будет зависеть от того, как работает этот сервис сборки. Например, TFS Build запускает MSBuild как любой пользователь, которого вы настроили для учетных данных входа для службы TFS Build. Если вы настроили CC.NET для запуска в качестве службы, вам также нужно указать, с каким пользователем он работает. Вот кто MSBuild также будет работать как.

Если вам нужна определенная среда, настроенная для сборки, у вас есть несколько вариантов. Самый простой, хотя и очень «гигантский молот», заключается в глобальном конфигурировании среды на машине для всех пользователей. Другие варианты включают запуск какого-либо этапа предварительной настройки в вашей сборке или запись начального командного файла для запуска службы вручную после настройки среды.