Что происходит
WindowsSdkDir
является Визуальная внутренняя переменная студия, которая получена из ключей реестра на основании свойства проекта «Платформа Toolset» (в разделе «Настройка свойств/General»). Для "Visual Studio 2012 (V110)" платформы набор инструментов, ключи реестра, такие как:
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0
HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0
HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0
HKCU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0
используются, независимо от ключей CurrentVersion
и CurrentInstallFolder
.
Как построить против Windows, 8.1 SDK с Visual Studio 2012
Что касается описанной в this blog:
VS 2010/2012 пользователей: Вы можете использовать технику лист свойств Windows 8.1 SDK, который был описан в этом Visual C++ Team blog post изначально для VS 2010 + Windows 8.0 SDK. Для VS 2010 просто измените часть путей с «8.0»/«win8» на «8.1»/«winv6.3», но в противном случае используйте все эти инструкции. Для VS 2012 вы можете упростить все пути, чтобы просто добавить пути 8.1 до существующего значения для каждой переменной. Обновленные .props прикреплены к этому сообщению в блоге. Это следует использовать только для разработки настольных приложений Win32.
После внесения этих изменений, вы должны получить таблицу свойств (который также представлен в качестве приложения к same blog), который для x86 выглядит как:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<ExecutablePath>$(ProgramFiles)\Windows Kits\8.1\bin\x86;$(ExecutablePath)</ExecutablePath>
<IncludePath>$(ProgramFiles)\Windows Kits\8.1\Include\um;$(ProgramFiles)\Windows Kits\8.1\Include\shared;$(ProgramFiles)\Windows Kits\8.1\Include\winrt;$(IncludePath)</IncludePath>
<LibraryPath>$(ProgramFiles)\Windows Kits\8.1\lib\winv6.3\um\x86;$(LibraryPath)</LibraryPath>
<ExcludePath>$(ProgramFiles)\Windows Kits\8.1\Include\um;$(ProgramFiles)\Windows Kits\8.1\Include\shared;$(ProgramFiles)\Windows Kits\8.1\Include\winrt;$(ExcludePath)</ExcludePath>
</PropertyGroup>
<ItemDefinitionGroup />
</Project>
и аналогично для x64:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<ExecutablePath>$(ProgramFiles)\Windows Kits\8.1\bin\x64;$(ExecutablePath)</ExecutablePath>
<IncludePath>$(ProgramFiles)\Windows Kits\8.1\Include\um;$(ProgramFiles)\Windows Kits\8.1\Include\shared;$(ProgramFiles)\Windows Kits\8.1\Include\winrt;$(IncludePath)</IncludePath>
<LibraryPath>$(ProgramFiles)\Windows Kits\8.1\lib\winv6.3\um\x64;$(LibraryPath)</LibraryPath>
<ExcludePath>$(ProgramFiles)\Windows Kits\8.1\Include\um;$(ProgramFiles)\Windows Kits\8.1\Include\shared;$(ProgramFiles)\Windows Kits\8.1\Include\winrt;$(ExcludePath)</ExcludePath>
</PropertyGroup>
<ItemDefinitionGroup />
</Project>
Предупреждение. Хотя это будет определять все пути, необходимые для сборки против Windows 8.1 SDK, он не изменяет WindowSdkDir
и связанные макросы, которые все равно указывают на SDK Windows 8.0. Это может потенциально привести к несогласованности сборки, если вы используете эти макросы для определения свойств проекта.
Наконец, обратите внимание, что Visual Studio 2013 поставляется с SDK Windows 8.1, и, соответственно, это SDK, используемый со значением свойства платформы Platform Visual Studio 2013 (v120). Поэтому, если обновление до VS2013 является вариантом, это может сэкономить вам немного неприятностей.