Как создать проект MakeFile VS2010 (vcxproj) с помощью TFS Build (No VS 2010) - PullRequest
16 голосов
/ 20 января 2011

У меня есть проект, который прекрасно строился в VS 2008, а затем мы установили и начали использовать TFS Build, а затем мы обновили до TFS 2010. Все было в порядке и работало правильно (после того, как я реализовал наш новый процесс сборки, который сделалвсе очень хорошо с одним нажатием кнопки запуска сборки с любого удаленного клиента Visual Studio 2010).Visual Studio не нужно было устанавливать на агенте сборки.Я очень стараюсь ( очень тяжело) не устанавливать Visual Studio на Build Agent, потому что я понимаю, что в этом нет необходимости, и у нас нет лицензии на его установку на компьютере, не предназначенном для разработки.

Теперь я попытался обновить решение до VS 2010, по-прежнему ориентируясь на .NET 3.5, поскольку это сборка, предназначенная для процедур CLR SQL Server, а SQL Server пока не поддерживает .NET 4.0.Но я просто не могу заставить его собираться под TFS Build.Кажется, я не могу получить согласованное сообщение об ошибке из TFS Build и из командной строки MS Build, но я думаю, что это как-то связано с Microsoft.Cpp.Targets, отсутствующим в C: \ Program Files \ MSBuild \, потому что у меня нетне установлен Visual Studio.Я установил Microsoft Windows SDK 7.1, чтобы можно было запускать такие инструменты .NET 4.0 SDK, как svcutil, для некоторых других проектов .NET 4.0, но, похоже, ничего не устанавливает то, что хочет эта сборка.Ошибка сборки TFS:

C: \ TFSBld [...] \ GenerateLanguage \ GenerateLanguage.vcxproj (46,3): ошибка MSB4019: импортированный проект "C: \ Microsoft.Cpp.Default.props "не найден.Убедитесь, что путь в объявлении правильный, и что файл существует на диске.

И когда я нажимаю на эту ошибку, она выводит меня на следующую строку в файле vcxproj:

  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

Все, что мне действительно нужно сделать в этом проекте, - запустить resgen, чтобы сгенерировать файлы ресурсов из файлов resx и скомпилировать их в спутниковые сборки.Для этого я использовал сборку make-файла, вручную запустив resgen (думаю, это потому, что я не могу найти способ компиляции сборочных сборок в качестве автономного решения каким-либо другим способом), а затем скомпилировал их в DLL (яя не могу вспомнить, как это работало сейчас, но я думаю, что он вручную запускал AL.exe для компиляции DLL-файлов из файлов ресурсов).Так что в основном мне просто нужно запускать командные строки для создания этого проекта, и я не могу найти разумный способ сделать это, не выбрасывая весь проект и не редактируя скрипт сборки TFS для запуска набора жестко запрограммированных командных строк.вместо.Должен быть лучший способ.

Я занимался этим весь день и пытался написать свой собственный файл .targets и листы свойств .xml, чтобы заменить стандартный файл, но это далеко от моегоголова.Я попытался просто удалить строки, но потом MSBuild жалуется, что нет цели "Build".Я попытался добавить фиктивный файл в файл vcxproj, но тогда он, похоже, не выполнял шаги до и после сборки, когда вся работа выполнена.

Ответы [ 4 ]

15 голосов
/ 22 января 2011

Microsoft Windows SDK 7.1 имеет несколько вариантов установки. Проверка только дочерних «Tools» «.NET Development», по-видимому, недостаточна для сборки проектов vcxproj, даже если они не содержат кода C ++ (только шаги до и после сборки). При добавлении параметра «Компиляторы Visual C ++» и полном выборе флажка «Intellisense и Reference Сборки» устанавливаются необходимые файлы и настройки. Я не уверен, что оба необходимы, но эта комбинация сработала для меня.

2 голосов
/ 21 января 2011

Я разработал несколько сложную, но функциональную работу, включающую следующие шаги:

  1. Скопируйте эти файлы из C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0в системе, где установлен VS2010 - включите их в систему контроля версий, чтобы они были получены как часть рабочей области:
    • Microsoft.Build.CPPTasks.Common.dll
    • Microsoft.BuildSteps.targets
    • Microsoft.Cl.Common.props
    • Microsoft.Cpp.Default.props
    • Microsoft.Cpp.props
    • Microsoft.Cpp.targets
    • Microsoft.CppBuild.targets
    • Microsoft.CppCommon.targets
    • Microsoft.Link.Common.props
    • Microsoft.MakeFile.targets
    • Платформы \ Win32 \ Microsoft.Cpp.Win32.default.props
    • Платформы \ Win32 \ Microsoft.Cpp.Win32.props
    • Платформы \ Win32 \ Microsoft.Cpp.Win32.targets
  2. Измените файл vcxproj, чтобы он ссылался на относительный путь, куда рабочее пространство помещает эти файлы вместо$ (VCTargetsPath).
  3. Измените строки (во всех этих файлах), чтобы использовать атрибут AssemblyFile = "Microsoft.Build.CPPTasks.Common.dll" вместо ссылки на это с помощью атрибута AsssemblyName.
  4. Удалите «$ (VCTargetsPath) \» в файлах в корне нового местоположения, чтобы он обнаружил файлы-братья, а не пытался ссылаться на несуществующий макрос VCTargetsPath.Вы можете найти пропущенные экземпляры, попробовав запустить сборку командной строки с MSBuild на компьютере без VS 2010 и посмотрев сообщения об ошибках.
  5. Аналогичным образом замените $ (VCTargetsPath) в файлах дочерних каталогов на относительные пути.
  6. В конце файла Microsoft.Cpp.Win32.targets закомментируйте "строка и следующие связанные .
  7. Метод проб и ошибок, запустите сборку командной строки и посмотрите, что еще я, возможно, забыл упомянуть. Я думаю, что это было большинство из них.
1 голос
/ 19 августа 2011

Улучшенная альтернатива BlueMonkMN заключается в добавлении

<PropertyGroup>
  <VCTargetsPath Condition="'$(VCTargetsPath)' == ''">[path_to_the_fileset_listed]</VCTargetsPath>
</PropertyGroup>

в качестве дочернего элемента 1-го уровня в верхней части vcxproj.

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

Это делает меньше вторжения и его легче вернуть, чем изменение множества строк.

0 голосов
/ 07 ноября 2014

Еще более простой подход с добавлением переменной среды для VCTargetsPath:

  1. Найдите папку CPP Msbuild, упомянутую BlueMonkMN
    • например, C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
  2. Открыть переменные среды Windows
    • Control Panel > System > Advanced Settings > Advanced > Environment Variables
  3. Добавить новую переменную пользователя с:
    • Имя: VCTargetsPath
    • Значение: [ваш путь к целям MsBuild из шага 1]
  4. Перезапустите Visual Studio.
  5. Готово.Ваш проект должен быть построен сейчас.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...