Skip navigation links
Блог лаборатории
Eugene Nourminsky
Dmitry Grechka
DreamSpark Premium
Проекты
Digital Workbook
Dynamic Data Display
Live@EDU на ВМК
Космические проекты
Мероприятия
Курсы
Семинар «Технологии разработки и анализа программ»
О лаборатории
Обратная связь
Categories
Archive
DevEnv VS MSBuild
Categories: TFS, Visual Studio

Продолжаю цикл постов про совместимость.

Я думаю, те, кто не первый год работает с Visual Studio знаю о том, что процессы сборки проектов из IDE и через утилиту msbuild при всей внешней схожести весьма различны.

В первую очередь это касается дополнительных надстроек Visual Studio – не всегда все работает корректно в обоих средах. И тот факт, что solution у вас собирается под Visual Studiо вовсе не гарантирует корректную сборку под MSBuild.

В частности, с этим сталкиваются пользователи Team Foundation Server. В TFS есть специальный компонент Team Foundation Build, который отвечает за автоматическую сборку исходников проекта на сервере. Выполняется он под MSBuild, который собирает проекты руководствуесь лишь ограниченным и достаточно простым набором правил.

DevEnv (Visual Studio) же собирает проекты в последовательности, определенной на нескольких источниках, таких как явные зависимости проектов и прописанные зависимости внутри файла solution.

Проблемы возникают, когда вы создаете нестандартный проект и ссылаетесь в нем на выход других проектов. Например, у нас это произошло с WIX, который создает инсталляционные пакеты. Под MSBuild проекты перестали собираться в нужной последовательности, в результате чего серверная сборка рухнула, а через IDE на всех машинах все прекрасно собиралось и работало.

Проблемы была локализована отнюдь не сразу. Впрочем, решение все-таки было найдено – в sln-файле по какой-то нелепой причине не были прописаны те самые зависимости проектов. Зависимости прописываются сразу после объявления проекта вверху файла:

Project("{SOMEGUID}") = "SampleProject", "SampleProject", "{SAMPLEPROJECTGUID}"

ProjectSection(ProjectDependencies) = postProject

{DEPENDENCYPROJECTGUID} = {DEPENDENCYPROJECTGUID}

{DEPENDENCYPROJECTGUID2} = {DEPENDENCYPROJECTGUID2}

EndProjectSection

Где DEPENDENCYPROJECTGUID и DEPENDENCYPROJECTGUID2 – GUID’ы проектов, от которых зависит проект SampleProject. После прописывания этих строк вручную, все стало собираться вновь без ошибок.

Надеюсь, вы потратили меньше времени на поиск решения, чем я ;)

Team Build 2010 vs Silverlight 3
Categories: Silverlight, TFS
Если вдруг для серверной сборки проектов вы используете 64-битную машину, то при попытке собрать любое Silverlight-приложение у вас вылезет ошибка:
 
C:\Program Files (x86)\MSBuild\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.Common.targets (101): The Silverlight 3 SDK is not installed.
 
Прямо скажем, малоинформативно, особенно учитывая тот факт, что Silverlight 3 SDK у вас наверняка есть (при наличии установленной Visual Studio 2010 на билд-сервере) и никакая переустановка/восстановление не поможет.
 
Ларчик открывается просто: по умолчанию на 64-битной машине платформа msbuild также x64, что совершенно несовместимо со сборкой Silverlight-проектов. Поэтому для корректного выполнения билда необходимо включить один маленький параметр в Build Definition - Process - 3. Advanced - MSBuild Platform = X86 как показано на картинке:
 
Здесь картинка