Подтвердить что ты не робот

Как построить проект VS2010 MakeFile (vcxproj) с TFS Build (Нет VS 2010)

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

Теперь я попытался обновить решение до 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, чтобы я мог запускать инструменты SDK.NET 4.0, такие как 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 и скомпилировать их в сборку sattelite. Я использовал makefile build для этого, вручную запуская resgen (я думаю, что это было потому, что я не могу найти способ скомпилировать сборки sattelite как автономное решение любым другим способом), а затем скомпилировать их в DLL (I не могу вспомнить, как это работает сейчас, но я думаю, что вручную AL.exe запускалось для компиляции DLL файлов из файлов ресурсов). Поэтому в основном мне просто нужно запускать командные строки для создания этого проекта, и я не могу найти разумный способ сделать это, не выбрасывая весь проект и редактируя сборку TFS script, чтобы запустить кучу жестко кодированных вместо командной строки. Там должен быть лучший способ.

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

4b9b3361

Ответ 1

В Microsoft Windows SDK 7.1 есть несколько вариантов установки. Наличие только ".NET Development" дочернего "инструментария", по-видимому, недостаточно для создания проектов vcxproj, даже если они не содержат кода на С++ (только шаги до и после сборки). Добавление опции "Visual С++ compilers" и установка флажка "Intellisense и Reference Assemblies" устанавливают необходимые файлы и настройки. Я не уверен, что оба они необходимы, но эта комбинация действительно работает для меня.

Ответ 2

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

  • Скопируйте эти файлы из 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
    • Platfotms\Win32\Microsoft.Cpp.Win32.targets
  • Измените файл vcxproj для ссылки на относительный путь, где рабочая область помещает эти файлы вместо $(VCTargetsPath).
  • Измените строки (во всех этих файлах), чтобы использовать атрибут AssemblyFile = "Microsoft.Build.CPPTasks.Common.dll" вместо ссылки на это с помощью атрибута AsssemblyName.
  • Удалить "$ (VCTargetsPath) \" в файлах в корневой папке нового местоположения, чтобы он нашел свои родственные файлы вместо того, чтобы пытаться ссылаться на несуществующий макрос VCTargetsPath. Вы можете найти экземпляры, которые вы пропустили, пытаясь запустить сборку командной строки с помощью MSBuild на машине без VS 2010 и глядя на сообщения об ошибках.
  • Аналогично замените $(VCTargetsPath) в файлах дочерних каталогов относительными путями.
  • В конце файла Microsoft.Cpp.Win32.targets закомментируйте "< VCMessage Code =" MSB8008 ".../ > " и следующие связанные < Импорт > .
  • Пробная версия и ошибка, запустите сборку командной строки и посмотрите, что еще я мог забыть упомянуть. Я думаю, что это было больше всего.

Ответ 3

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

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

как дочерний уровень 1 в верхней части vcxproj.

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

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

Ответ 4

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

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