2015-03-04 2 views
6

Моя установка заключается в следующем:Как построить против окон 8.1 SDK

для Windows 8.1, Microsoft Visual Studio 2012

Я хотел бы построить против 8.1 SDK Windows. Мое приложение - C++, нет компонентов среды Windows или что-то в этом роде.

У меня есть окна установлены 8.1 SDK, но Visual Studio строит против Windows 7 SDK, поэтому для переключения цели я изменить ключи реестра, которые указывают на текущую версию SDK:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows Registry

Однако, когда я проверяю макросов в Visual Studio это теперь строит против Windows SDK 8.0 вместо 8.1.

Visual Studio Macros

Может кто-нибудь объяснить, почему это происходит? Я не смог построить против Windows 8.1 SDK с моей настройкой, просто невозможно использовать Visual Studio 2012? Я не могу найти исчерпывающей информации, чтобы сказать мне, поддерживается ли она или нет.

ответ

6

Что происходит

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 является вариантом, это может сэкономить вам немного неприятностей.