Visual Studio 2012与2010年一起 - kernel32.lib,windows.h

fox*_*337 9 c++ visual-studio-2010 visual-studio-2012

我刚刚将Visual Studio 2012与Visual Studio 2010一起安装.问题是我无法将简单项目从2010转换到2012年 - 它们无法链接到kernel32.lib等文件或包含windows.h等文件.我的系统还安装了Windows SDK 7.1.

我已经尝试过为我的x86和x64用户平台弄乱Property Manager(因为我在那里添加了适当的$(DXSDK_DIR)引用),只是为了得到混合的结果 - 有时它只是有效,有时它编译但不链接,其他时候它只是停在windows.h

例如,目前我正在接受

1>LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
Run Code Online (Sandbox Code Playgroud)

要么

1>Source.cpp(2): fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

(取决于是否包含"windows.h"),仅在x64中使用简单的"hello world"类型程序.

Active(Debug) / Active(x64) -> VC++ Directories -> Include Directories我现在可以看到的项目属性中$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath);$(DXSDK_DIR)Include.如果我展开该输入框并单击编辑,我会看到:

$(VCInstallDir) = C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\
$(WindowsSDK_IncludePath) = c:\Program Files (x86)\Windows Kits\8.0\Include\um;c:\Program Files (x86)\Windows Kits\8.0\Include\shared;c:\Program Files (x86)\Windows Kits\8.0\Include\WinRT
Run Code Online (Sandbox Code Playgroud)

虽然我的平台工具集v110 windows.h驻留在c:\Program Files (x86)\Windows Kits\8.0\Include\um\Windows.h(所以应该没有问题).如果我选择Windows SDK 7.1作为平台工具集,则功能有效.

除格式化和重新安装Windows之外的任何解决方案?

LE,如果我用系统内的绝对路径替换$(变量)目录,一切正常.我不明白为什么我会这样做,因为我也和其他人分享这个项目.

小智 9

我知道上面几乎有一个答案.但...

问题似乎是当安装VS2012和VS2010时,VS2012的配置无法正常工作.

修复方法是编辑%home%\ AppData\Local\Microsoft\MSBuild\v4.0中的props文件.

这些是使用SDK v8.1为我工作的文件.

第一个用于32位版本的Microsoft.Cpp.Win32.user.props:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludePath>C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;$(IncludePath)</IncludePath>
    <LibraryPath>C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;$(LibraryPath)</LibraryPath>
    <ExecutablePath>C:\Program Files (x86)\Windows Kits\8.1\bin\x86;$(ExecutablePath)</ExecutablePath>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

现在Microsoft.Cpp.x64.user.props用于64位版本:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludePath>C:\Program Files (x86)\Windows Kits\8.1\include\um;C:\Program Files (x86)\Windows Kits\8.1\include\shared;C:\Program Files (x86)\Windows Kits\8.1\include\winrt;$(IncludePath)</IncludePath>
    <LibraryPath>C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64;$(LibraryPath)</LibraryPath>
    <ExecutablePath>C:\Program Files (x86)\Windows Kits\8.1\bin\x64;$(ExecutablePath)</ExecutablePath>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

我希望这有助于其他人解决这个问题,我还没有找到其他地方发布的解决方案.


Yoc*_*mer 5

我有一个类似的问题。
就我而言,这是因为项目设置中没有继承正确的路径。

检查路径是否继承于:Project -> Properties -> VC++ Directories
Under IncludeLibrary Directories转到Edit

确保Inherit from parent or project defaults已选中。

VS2012 默认属性和宏设置正确。(虽然我遇到了常见的安装问题,我不得不替换所有 VC 目录,因为它甚至没有安装 C++ 核心库)