Visual studio WindowsSDK\u IncludePath在哪里定义?

Visual studio WindowsSDK\u IncludePath在哪里定义?,visual-studio,visual-studio-2013,visual-studio-2015,Visual Studio,Visual Studio 2013,Visual Studio 2015,宏$(WindowsSDK\u IncludePath)的值如图所示 我想知道这些值是在哪里定义的,它们必须在一些文件中定义 这张照片是在Visual Studio 2013中拍摄的 我在文件夹C:\ProgramFiles(x86)\Windows Kits\8.0\build\CommonConfiguration\Neutral <PropertyGroup> <WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''"

宏$(WindowsSDK\u IncludePath)的值如图所示

我想知道这些值是在哪里定义的,它们必须在一些文件中定义

这张照片是在Visual Studio 2013中拍摄的


我在文件夹
C:\ProgramFiles(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>

$([MSBUILD]::GetDirectoryNameOffileOver(“$(MSBUILDTHISFILEDIRECTORY)”,“sdkmanifest.xml”))
$(WindowsSdkDir)包含\um$(WindowsSdkDir)包含\共享$(WindowsSdkDir)包含\winrt;

我使用Win8+VS2012,因此它应该位于VS2013+8.1 SDK的文件夹8.1中。

对我来说,它是文件夹
C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V140
中的文件
中的Microsoft.Cpp.Common.props
,我必须将硬编码的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>

10.0.10586.0

我在Windows 10上使用VS2015,无法针对Windows 8.1 SDK进行编译,因为缺少包含文件。安装独立的Windows 10 SDK也没有任何帮助(因为它不包含10.0.10240的ucrt文件,如ctype.h a.s.o)。

在我的例子中,
WindowsSDK\u IncludePath
变量定义正确,事实上它在Visual Studio 2013中运行良好。所以我甚至卸载并重新安装了VS2015。然后我发现,由于预设的宏变量可以通过特定的用户设置进行修改。这些用户设置存储在
C:\Users\\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>

美元(VC_包括路径)$(WindowsSDK_包括路径);C:\ProgramFiles(x86)\CodeSynthesis XSD 4.0\include;
$(VC_LibraryPath_x86)$(WindowsSDK_LibraryPath_x86);C:\ProgramFiles(x86)\CodeSynthesis XSD 4.0\lib\vc-12.0;
C:\ProgramFiles(x86)\CodeSynthesis XSD 4.0\bin$(VC_可执行路径_x86)$(WindowsSDK_可执行路径)$(VS_可执行路径)$(MSBuild_ExecutablePath)$(系统根)\SysWow64$(FxCopDir)$(路径);
不知何故,
语句使得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的执行偏好,但现在我没有在任何使用它的项目上工作。我将继续试验此文件的不同变体。

在C:\Program Files(x86)\Windows工具包中搜索*.props\

在我的例子中,导致问题的文件是UAP.props。编辑文件并将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\4.7.1@KitsInstallationFolder)</DotNetSdkRoot>
    <DotNetSdkRoot Condition="'$(DotNetSdkRoot)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.7.1@KitsInstallationFolder)</DotNetSdkRoot>
  </PropertyGroup>

$([MSBUILD]::GetDirectoryNameOffileOver(“$(MSBUILDTHISFILEDIRECTORY)”,“sdkmanifest.xml”))\
$(注册表:HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Microsoft SDK\NETFXSDK\4.7。1@KitsInstallationFolder)
$(注册表:HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDK\NETFXSDK\4.7。1@KitsInstallationFolder)

使用
/preprocess
在命令行上构建项目文件以查找(
msbuild/preprocess myproject.vcxproj
,然后搜索输出以查找属性的定义位置)。@JamesMcNellis Hm?!我收到
命令行警告D9002:忽略未知选项“/preprocess”
?您的意思是将
/preprocess
放入配置属性>C/C++>命令行>附加选项?打开开发人员命令提示符(它位于“开始”菜单上的“Visual Studio工具”文件夹中),更改到项目所在的目录,然后运行该命令。这将从命令行运行MSBuild以预处理项目文件,并允许您查看将生成的整个项目,包括所有导入的文件。好的,太好了,谢谢,它起作用了。但是所有输出都在控制台窗口中,我可以将其输出到tex吗t file?@JamesMcNellis顺便说一句,在完成这个构建之后,我可以找到一个地方写一些东西,比如,
$(WindowsSDK\u IncludePath)=C:\Program Files(x86)\Windows Kits\8.1\Include\um+…
,对吗?我只是想知道定义这些宏及其值的位置:pAwesome!就是这样!顺便问一下,您知道visual studio是如何读取此文件的吗?为了提供一些信息,8.1在
C:\Program Files(x86)中有此文件\Windows Kits\8.1\DesignTime\CommonConfiguration\Neutral\Windows.props
我有相同的SDK(8.0、8.1、10.0),但它们都没有“build”子文件夹。@VioletGiraffe查看Marson Mao的评论,8.1版本存储在DesignTime下,而不是build下。@VioletGiraffe:卸载另一个(更新的?)您未用于此生成的SDK,然后修复使用过的SDK(从控制面板-程序和功能-选择Windows Sofrware开发工具包…-更改-修复)。谢谢,这解决了我的问题。在我的情况下,我使用VS2013,然后安装VS2017,然后卸载VS2017。但后来我发现它破坏了VS2013 msbuild。