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, но, похоже, он вернулся к Решению.
Во всяком случае, я нашел два решения проблемы:
- Убедитесь, что построили
.proj
файл (где версия инструментов действительно установлена на12.0
). - Явно установите VCTargetsPath.
Попробуйте установить переменную среды
VisualStudioVersion=12.0
или передать его явно как свойство msbuild в командной строке
msbuild.exe <project or solution to build> /p:VisualStudioVersion=12.0
Я думаю, это потому, что Microsoft пытается сохранить совместимость со старыми Visual Studios.
увидеть совместимость проекта Visual Studio и VisualStudioVersion