задача терпит неудачу в то время какуспешно для приложения MFC в CruiseControl.NET? - PullRequest
4 голосов
/ 13 июня 2010

Обзор

Я работаю над сборкой приложения MFC для непрерывной интеграции через CruiseControl.net и VS2010.При сборке моего .sln работает задача CCNet "Visual Studio" (<devenv/>), но простой скрипт-оболочка MSBuild (см. Ниже), запускаемый через задачу CCNet <msbuild/>, завершается ошибкой, например:

  • ошибка RC1015: невозможно открыть файл включения 'winres.h' ..
  • ошибка C1083: невозможно открыть файл включения: 'afxwin.h': такого файла или каталога нет
  • ошибка C1083:Не удается открыть включаемый файл: 'afx.h': такого файла или каталога нет

Вопрос

Как настроить среду сборки моей оболочки msbuildчтобы приложение строилось правильно?(Совершенно очевидно, что пути MFC не подходят для среды msbuild, но как мне исправить это для MSBuild + VS2010 + MFC + CCNet?)

Справочная информация

  • Мы успешно обновили приложение MFC (.exe с некоторыми расширениями MFC .dll) до Visual Studio 2010 и можем без проблем скомпилировать приложение на компьютерах разработчиков.
  • Сейчас я работаю над компиляцией приложения в среде сервера CI.
  • Я выполнил полную установку VS2010 (Professional) на сервере сборки.Таким образом, я знал, что все, что мне нужно, будет на компьютере (так или иначе), и это будет соответствовать машинам разработчика.
  • VS2010 правильно установлен на сервере CI, и задача devenv работаеткак и ожидалось
  • Теперь у меня есть сценарий-оболочка MSBuild, который выполняет расширенную обработку версий, а затем создает файл .sln для приложения с помощью задачи MSBuild.
  • Этот скрипт-обертка запускается через задачу CCNet MSBuild и завершается ошибкой с вышеупомянутыми ошибками

Simple MSBuild Wrapper

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
   xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Build">
    <!-- Doing some versioning stuff here-->
    <MSBuild Projects="target.sln" 
      Properties="Configuration=ReleaseUnicode;Platform=Any CPU;..." />
  </Target>
</Project>

Мои предположения

  • Похоже, что отсутствует / неверная конфигурация путей включения к стандартным ресурсам заголовка MFC убеждения
  • Я должен быть в состоянии принудитьСреда MSBuild для рассмотрения соответствующих файлов ресурсов из моей установки VS2010 и использования этого подхода.
  • Учитывая поддержку msbuild vs2010 для проектов Visual C ++ (.vcxproj), не следует, чтобы сборка решения была очень близка к компиляции черезvisual studio?

Но как мне это сделать?Я устанавливаю переменные среды?Настройки реестра?Я вижу, как в некоторых случаях можно добавить дополнительные каталоги, но для этого требуется более системная конфигурация на уровне значений по умолчанию компилятора.

Обновление 1

Это, по-видимому, происходит только в двух случаях: компиляция ресурсов (rc.exe) и компиляция предварительно скомпилированных заголовков (stdafx.h) и толькодля определенных проектов?Я думал, что это было по всем направлениям, но на самом деле, похоже, только в этих случаях.Думаю, я буду продолжать копать и надеюсь, что у кого-то есть понимание, которым они будут готовы поделиться ...

Решение

Я сделал две корректировки, чтобы заставить это работать.Первым было извлечь сторонний проект из моего решения и построить его самостоятельно (в нем было много ошибок).Зарегистрировав его в двоичном коде для управления исходным кодом (как и во многих других сторонних библиотеках), я связался с ним без проблем.Однако, как многие отмечают, это было всего лишь предотвращением проблемы.

Вторая часть решения была случайно найдена, но явно подразумевается контрольным списком предложения У. Крейга Трейдера.То есть я вручную перенес исходный код в свой рабочий каталог на сервере и вручную построил решение в Visual Studio.Независимо от существовавшей проблемы пути / среды / состояния конфигурации была устранена фактическая загрузка Visual Studio для этого пользователя службы ccnet.Это, безусловно, имеет смысл в ретроспективе.

1 Ответ

2 голосов
/ 19 июня 2010

Слишком много переменных, чтобы точно предсказать, в чем заключается проблема, но вот список вещей, которые я проверю / сделаю, чтобы проверить это на земле:

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

  • Вы установили VS2010 в качестве пользователя службы CC.net? Если нет, проверьте параметры среды для устанавливающего пользователя - у него могут быть дополнительные параметры пути, которые необходимо добавить для пользователя службы CC.net.

  • Включите ведение журнала консоли CC.net и увеличьте уровень журнала до максимального, затем посмотрите, что произойдет, когда начнется сборка. Это будет многословно, но может содержать полезные сведения о среде сборки.

  • Что происходит, когда разработчик входит на сервер CC.net, проверяет ваше решение и создает его локально. Он правильно строит?

  • В прошлом я считал необходимым запускать Visual Studio (с использованием параметров командной строки) для построения решений, поскольку не было задач msbuild для всех типов проектов (в частности, для проектов установки не из WiX). ). Что изменится, если вы сделаете это на сервере CC.net?

...