【问题标题】:WindowsSDK_ExecutablePath not set correcty in VS2015 VC++ variablesWindowsSDK_ExecutablePath 未在 VS2015 VC++ 变量中设置正确
【发布时间】:2018-03-16 12:12:21
【问题描述】:

我在网上进行了很多搜索,但找不到合适的解决方案,只有解决方法。我想知道 VS2015 或 WindowsSDK 安装是否损坏。

事情是这样的: 我得到问题构建(在链接阶段)并且 VS 环境报告找不到资源编译可执行文件(rc.exe)

TRACKER : error TRK0005: Failed to locate: "rc.exe". The system cannot find the file specified.

我在我的机器上四处搜索,发现二进制文件位于:

C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64

所以快速的解决方法是将该路径添加到 PATH 并且一切正常。但我对此并不满意,因为我确信 Windows SDK 安装程序(或 VS)应该能很好地处理这个问题。

如果我查看 VS IDE -> 项目 -> 属性 -> 配置属性 -> VC++ 目录并查看“可执行目录”,我希望在那里找到正确的路径。所以我通过打开 MACRO(右下角)并过滤 WindowsSDK_ExecutablePath 来检查它:我看到了

$(WindowsSDK_ExecutablePath) = C:\Program Files (x86)\Windows Kits\10\bin\x86 $(WindowsSDK_ExecutablePath_arm) = C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\arm $(WindowsSDK_ExecutablePath_arm64) = C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\arm64 $(WindowsSDK_ExecutablePath_x86) = C:\Program Files (x86)\Windows Kits\10\bin\x86 $(WindowsSDK_ExecutablePath_x64) = C:\Program Files (x86)\Windows Kits\10\bin\x64

如您所见,英特尔架构文件夹指向一个通用位置(不是特定于 SDK 版本的位置),当然没有这些二进制文件。有趣的是,ARM 文件夹是正确的。

我正在尝试了解是什么损坏了这些文件夹...

我猜它是 SDK 安装程序,就像位于

中的 UAP.props 文件中一样

$(WindowsSDKDir)/DesignTime/CommonConfiguration/Neutral/UAP/10.0.16299.0/

我可以看到这个

<WindowsSDK_ExecutablePath_x86>$(WindowsSdkDir)bin\x86;</WindowsSDK_ExecutablePath_x86> <WindowsSDK_ExecutablePath_x64>$(WindowsSdkDir)bin\x64;</WindowsSDK_ExecutablePath_x64>

虽然我不是 100% 确定,因为这是安装后,所以它可能是 VS 改变它。

有什么想法吗?建议?有谁遇到过同样的问题并设法找到适当的解决方法而不是变通方法?

【问题讨论】:

  • 顺便说一句,这在 VS 2017 中按预期工作,可执行文件指向正确的位置。我猜通过查看它在 UAP.props 中的设置方式,WindowsSDKDir 本身可能是错误的或未更新
  • 使用 .rc 文件的项目应将其目标平台版本设置为 8.1。仅 UWP 应用需要针对众多 10.0.x 版本之一。哪个不使用 .rc
  • @HansPassant 感谢您的评论。那会解释很多。我在哪里可以找到有关此的深入文档?我四处搜索,但我发现微软论坛真的很混乱
  • @HansPassant 当你以 8.1 为目标时,你会得到一个相当旧的 libucrt.lib 版本。我们发现,获得当前libucrt.lib 的唯一干净方法是切换到更新的 Windows 10 SDK。然后导致此错误。

标签: winapi visual-c++ visual-studio-2015


【解决方案1】:

是的,不确定这是否是正确的,但在这一点上对这个问题进行了一些研究。我发现的是

中的这个奇怪的 xml 代码块

$(WindowsSDKDir)\DesignTime\CommonConfiguration\Neutral\UAP\10.0.16299.0\UAP.props

看起来像这样:

<PropertyGroup Condition="'$(VisualStudioVersion)' != '' and '$(VisualStudioVersion)' &lt;= '14.0'">
  <WDKBinRoot>$(WindowsSdkDir)bin</WDKBinRoot>
  <WindowsSDK_ExecutablePath_x86>$(WindowsSdkDir)bin\x86;</WindowsSDK_ExecutablePath_x86>
  <WindowsSDK_ExecutablePath_x64>$(WindowsSdkDir)bin\x64;</WindowsSDK_ExecutablePath_x64>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &gt; '14.0'">
  <WDKBinRoot>$(WindowsSdkDir)bin\10.0.16299.0</WDKBinRoot>
  <WindowsSDK_ExecutablePath_x86>$(WindowsSdkDir)bin\10.0.16299.0\x86;</WindowsSDK_ExecutablePath_x86>
  <WindowsSDK_ExecutablePath_x64>$(WindowsSdkDir)bin\10.0.16299.0\x64;</WindowsSDK_ExecutablePath_x64>
</PropertyGroup>

如果我错了,请纠正我,但如果您有 VS2015(即 14.0),这似乎无济于事

所以我在那个块之后附加了这个:

<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">
  <WDKBinRoot>$(WindowsSdkDir)bin\10.0.16299.0</WDKBinRoot>
  <WindowsSDK_ExecutablePath_x86>$(WindowsSdkDir)bin\10.0.16299.0\x86;</WindowsSDK_ExecutablePath_x86>
  <WindowsSDK_ExecutablePath_x64>$(WindowsSdkDir)bin\10.0.16299.0\x64;</WindowsSDK_ExecutablePath_x64>
</PropertyGroup>

有了这个改变,一切正常。我想知道为什么这个文件是这样填充的。如果你看最后它包括 arm 和 desktop.arm 道具。我还想知道我是否可以创建一个与这个通用 UAP.props 分开的属性文件。

当然,这仅修复了这个特定的 SDK 版本,您必须为每个安装的版本执行此操作,如果您安装新版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多