Где определяется WindowsSDK IncludePath?

макрос $(WindowsSDK_IncludePath) имеет значения, показанные на рисунке.

Я хотел бы знать, где определены эти значения, они должны быть определены в некоторых файлах.

снимок был сделан из Visual Studio 2013.

enter image description here

4 ответов


Я вижу данные в файл sdk.props в папке C:\Program Files (x86)\Windows Kits.0\build\CommonConfiguration\Neutral

<PropertyGroup>
     <WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''">$([MSBUILD]::GetDirectoryNameOfFileAbove('$(MSBUILDTHISFILEDIRECTORY)', 'sdkmanifest.xml'))</WindowsSdkDir>
  </PropertyGroup>

  <PropertyGroup>    <WindowsSDK_IncludePath>$(WindowsSdkDir)Include\um;$(WindowsSdkDir)Include\shared;$(WindowsSdkDir)Include\winrt;</WindowsSDK_IncludePath>
  </PropertyGroup>

Я использую Win8 + VS2012, поэтому он должен быть в папке 8.1 для вашего VS2013 + 8.1 SDK.


в моем случае WindowsSDK_IncludePath переменная была правильно определена и фактически отлично работала в Visual Studio 2013. Поэтому я даже удалил и переустановил VS2015. Тогда я нашел благодаря этой ссылке что предустановленные переменные макроса могут быть изменены определенными пользовательскими настройками. Эти пользовательские настройки хранятся в C:\Users\<user>\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props в моем случае следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);C:\Program Files (x86)\CodeSynthesis XSD 4.0\include;</IncludePath>
    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);C:\Program Files (x86)\CodeSynthesis XSD 4.0\lib\vc-12.0;</LibraryPath>
    <ExecutablePath>C:\Program Files (x86)\CodeSynthesis XSD 4.0\bin;$(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH);</ExecutablePath>
  </PropertyGroup>
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

почему-то <IncludePath> предложение сделало невозможным для VS2015 найти правильное значение. В моем ноутбуке компьютер, где все работало правильно, файл был в основном пуст:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
  </PropertyGroup>
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

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


для меня это был файл Microsoft.Cpp.Common.props в папке C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140, где мне пришлось изменить жестко закодированную версию Windows 10 SDK с 10.0.10240.0 на 10.0.10586.0.

<!-- 10.0.10240.0 is the hardcoded checked-in version of uCRT that we use in case we target 8.1 SDK -->
<TargetUniversalCRTVersion Condition="'$(TargetUniversalCRTVersion)' == ''  and ('$(TargetPlatformVersion)' == '8.1' or '$(DefineWindowsSDK_71A)' == 'true')">10.0.10586.0</TargetUniversalCRTVersion>

Я использую VS2015 в Windows 10 и не смог скомпилировать Windows 8.1 SDK из-за отсутствия файлов include. Установка автономного Windows 10 SDK также не помогла (потому что он не содержит файлов ucrt для 10.0.10240, таких как ctype.h a.s.о.).


поиск по *.подпорки C:\Program файлы (x86)\Windows Kits\

в моем случае файл, вызывающий проблему, был UAP.реквизит. Редактирование файла и изменение 4.7.1 на 4.6.1 решило проблему.

<PropertyGroup>
    <WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''">$([MSBUILD]::GetDirectoryNameOfFileAbove('$(MSBUILDTHISFILEDIRECTORY)', 'sdkmanifest.xml'))\</WindowsSdkDir>
    <DotNetSdkRoot Condition="'$(DotNetSdkRoot)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK.7.1@KitsInstallationFolder)</DotNetSdkRoot>
    <DotNetSdkRoot Condition="'$(DotNetSdkRoot)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\NETFXSDK.7.1@KitsInstallationFolder)</DotNetSdkRoot>
  </PropertyGroup>