VCTargetsPath неверно при сборке с MSBuild на сервере сборки

В моем C++ проекте Test.wcxprojУ меня определены следующие конфигурации:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>

Тогда у меня есть проблемный импорт свойств C++ по умолчанию:

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

Когда мой сервер сборки собирает мой файл проекта MSBuild (конфигурация Release и платформа Any CPU), Я получаю эту ошибку:

error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Соответствующие части моего MSBuild Файл проекта выглядит так:

<ItemGroup>
   <ProjectFiles Include="$(MSBuildProjectDirectory)\**\*.csproj" />
   <ProjectFiles Include="$(MSBuildProjectDirectory)\**\*.vcxproj" />
</ItemGroup>
<PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>x64</Platform>
    <OutputFolder>$(MSBuildProjectDirectory)\BuildOutput\$(Configuration)</OutputFolder>
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)</SolutionDir>
</PropertyGroup>
...
<Target Name="Compile">
    <MSBuild Projects="@(ProjectFiles)" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform);OutputPath=$(OutputFolder)\$(MSBuildProjectName);SolutionDir=$(SolutionDir)\" />
</Target>

Эта проблема

В моем MSBuild файл проекта, я использую ToolsVersion="12.0", Visual Studio 2013 действительно установлен, поэтому я не понимаю, почему он решает использовать v4.0\v110, Конфигурации моего проекта по какой-то причине пропущены MSBuild? Я думаю, я мог бы как-то переопределить эту папку, используя /p переключиться, но я хочу, чтобы мой .proj файл должен быть автономным.

2 ответа

Решение

В моем случае мое определение сборки было настроено так, чтобы .sln файл вместо моего .proj файл. Я помню, как настраивал его для создания проекта MSBuild, но, похоже, он вернулся к Решению.

Во всяком случае, я нашел два решения проблемы:

  1. Убедитесь, что построили .proj файл (где версия инструментов действительно установлена ​​на 12.0).
  2. Явно установите VCTargetsPath.

Попробуйте установить переменную среды

VisualStudioVersion=12.0

или передать его явно как свойство msbuild в командной строке

msbuild.exe <project or solution to build> /p:VisualStudioVersion=12.0

Я думаю, это потому, что Microsoft пытается сохранить совместимость со старыми Visual Studios.

увидеть совместимость проекта Visual Studio и VisualStudioVersion

Другие вопросы по тегам