В чем разница между использованием "devenv" и "msbuild" в сборках CruiseControl.NET?

В чем основное отличие между использованием <devenv> тег и <msbuild> тег находится в CruiseControl.NET?

Я понимаю, что они называют разные исполняемые файлы, но иногда я получаю разные результаты (насколько pass/fail во время компиляции), и я хотел бы знать, почему существует разница между двумя командами сборки.

Ответ 1

В основном devenv (Visual Studio) обертывает MSBuild и добавляет множество специфических свойств Visual Studio.

Чтобы использовать devenv, вам нужна Visual Studio, установленная на вашем компьютере. Чтобы использовать MSBuild, вам нужно иметь только .NET framework.

Ответ 2

Для нас главное отличие заключается в том, что devenv будет обрабатывать проекты установщика (*.vdproj), а msbuild - нет. Если я правильно помню, msbuild гораздо менее прощает, когда дело доходит до поиска ссылочных сборок (особенно если пути немного отключены.)

Ответ 3

Одна из вещей, которую мы обнаружили при переходе на TFS (которая использует msbuild, по крайней мере, как мы ее настроили) из VSS/CruiseControl.NET(который, как я предполагаю, используется в нашей конфигурации), заключается в том, что иногда ProjectGuids выйти из синхронизации.

Итак, Project A ссылается на проект B, а проект или файл решения для Project A имеет ProjectGuid и путь к файлу проекта Project B. Однако по какой-либо причине Project B ProjectGuid изменился, и проект Project или файл решения не обновился, чтобы отразить это.

Devenv отлично, потому что он либо просто использует путь к файлу проекта Project B, либо возвращается к нему. Однако Msbuild останавливается на холодном этапе, потому что если ProjectGuids не соответствуют ему, нет необходимости. На этом этапе вы можете либо исправить это в Visual Studio (я думаю, что удаление и повторное добавление работы проекта), либо вручную через "Блокнот" или что-то еще.

Я оставлю это вам, чтобы решить, что лучше (строгое соблюдение ProjectGuid или снисхождение, когда известен путь к проекту)