web-dev-qa-db-fra.com

Où est défini WindowsSDK_IncludePath?

La macro $ (WindowsSDK_IncludePath) a les valeurs indiquées dans l'image.

Je voudrais savoir où ces valeurs sont définies, elles doivent être définies dans certains fichiers.

La photo a été prise à partir de Visual Studio 2013.

 enter image description here

14
Marson Mao

Je vois les données dans le fichier sdk.props dans le dossier C:\Program Files (x86)\Windows Kits\8.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>

J'utilise un Win8 + VS2012, il devrait donc être dans le dossier 8.1 pour votre SDK VS2013 + 8.1.

5
magicandre1981

Dans mon cas, la variable WindowsSDK_IncludePath était correctement définie et fonctionnait parfaitement dans Visual Studio 2013. J'ai donc même désinstallé et réinstallé VS2015. Ensuite, j'ai trouvé grâce à ce lien que les variables de macro prédéfinies peuvent être modifiées par des paramètres utilisateur spécifiques. Ces paramètres utilisateur sont stockés dans C:\Users\<user>\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props qui, dans mon cas, se lit comme suit:

<?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>

D'une manière ou d'une autre, la phrase <IncludePath> empêchait VS2015 de trouver la valeur correcte. Dans mon ordinateur portable où tout fonctionnait correctement, le fichier était essentiellement vide:

<?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>

Après avoir configuré mon fichier comme celui de mon ordinateur portable, tout a fonctionné normalement. Bien sûr, j'ai perdu la préférence d'exécution de CodeSynthesis XSD mais pour le moment je ne travaille sur aucun projet qui l'utilise. Je vais continuer à expérimenter différentes variantes de ce fichier.

4
malopezmx

Pour moi, c’était le fichier Microsoft.Cpp.Common.props dans le dossier C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140, où je devais changer la version codée en dur du SDK Windows 10 de 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>

J'utilise VS2015 sur Windows 10 et je n'ai pas pu compiler avec le SDK Windows 8.1 à cause des fichiers d'inclusion manquants. L'installation du Kit de développement logiciel (SDK) autonome de Windows 10 n'a pas aidé non plus (car il ne contient pas de fichiers ucrt pour 10.0.10240 comme ctype.h a.s.o.).

3
JeffRSon

Recherchez * .props dans C:\Program Files (x86)\Windows Kits \

Dans mon cas, le fichier à l'origine du problème était UAP.props. La modification du fichier et la modification de 4.7.1 à 4.6.1 ont résolu le problème.

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