【问题标题】:MSBuild 2019 ignores INCLUDE environment variableMSBuild 2019 忽略 INCLUDE 环境变量
【发布时间】:2020-03-03 23:25:54
【问题描述】:

我正在使用两台装有 Visual Studio 2019 的机器。一台是社区版,另一台是专业版。

MSBuild 的专业版完全忽略了 INCLUDE 环境变量,所以我正在尝试构建的项目(ICU)找不到 stddef.h。 stddef.h 文件位于 Windows Kits 10 ucrt 目录中,该目录包含在 INCLUDE env var 中。

社区版不这样做。

当我使用 /v:diag 选项构建项目时,我可以看到 INCLUDE env var 中定义的大部分内容都添加到名为 CAExcludePath 的变量中。

这是 INCLUDE 环境变量:INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include;;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\UnitTest\include;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;;

这是 CAExcludePath:CAExcludePath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;;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;;

为什么会发生这种情况,我该如何预防?

【问题讨论】:

  • 您关注this document 安装Windows Kits 工具了吗?通常,您应该在 VS IDE 而不是环境变量中设置这些路径。在我这边,当我按照安装程序的步骤完成最后一步安装Windows Driver Kit时,我可以直接在代码中使用它,因为它已经包含在Include Directories中。自动
  • 我在 Visual Studio 安装程序中安装了必要的工具包。这就是为什么它们被 VS 的本机工具命令提示符添加到 INCLUDE 路径的原因(请参阅我发布的 INCLUDE env var 中的 Kit 目录)。但是我没有安装 Windows Driver Kit。 ICU 项目不需要这些。但是如果 WDK 改变了 VS 的行为,所以它不会忽略 INCLUDE var,那么我会试一试。

标签: c++ windows visual-studio msbuild include


【解决方案1】:

MSBuild 2019 忽略 INCLUDE 环境变量

我认为您不应该将这些路径设置为环境变量。对于 C++ 项目,VS 默认不识别系统环境变量中的库路径,这不是 VS 的工作。

通常,您应该在 VS IDE 中设置额外的库路径。右击你的项目-->Properties-->Configuration Properties-->VC++ Directories-->Include DirectoriesProperties-->Configuration Properties-->C/C++-->@ 987654336@。可以参考this official document

不过,当我安装Windows Kits工具时,该路径默认包含在包含路径中,您可以直接在代码中使用它。看到这个:

所以恐怕你在安装Windows Kits工具的时候出了点问题。请按照this document安装正确的工具,在完成之前,请安装相关的扩展,这是Visual Studio 2019安装程序中集成工具的最后一步。

我想当你安装扩展时,这些路径会自动包含在 VS 中,你可以直接使用它们。

另外,如果你不想安装这个扩展,你可以按照我上面提到的步骤手动添加包含路径。

如果您已完成这些步骤但仍然遇到相同的错误,我认为您应该检查您的环境并遵循以下建议:

1)关闭VS Instance,删除.vsbinobj文件夹,重新打开你的项目,然后重新构建

2) do a repair 在 VS 安装程序中

3)如果你的VS不是最新的,请更新你的VS,同时不要忘记更新操作系统。

希望这些帮助。

【讨论】:

  • 好吧,这种帮助,因为你说“VS默认不识别系统环境变量中的库路径”。但是为什么 VS 的社区版会识别它们呢?在我看来,这种行为应该是一致的——并且是可配置的。最终我的问题是:你如何配置 VS 使其不会忽略 INCLUDE env var 值?我可以在每个系统的基础上调整 ICU 项目文件,但这并不理想。应该能够使用本机开发人员命令提示符(将工具包添加到 INCLUDE 路径)从命令行运行 MSBuild,它应该可以工作。
  • 我想重申,从本机工具命令提示符使用 MSBuild 构建确实适用于社区版。所以我只是想弄清楚如何让专业版做同样的事情(配置它,这样它就不会忽略 INCLUDE env var 中的路径)。
  • 您从 msbuild diag 显示的 INCLUDE 信息刚刚由来自 VS 内部包含路径的 msbuild 目标传输。如果您删除社区版中的INCLUDE environment vaiables,您是否遇到同样的错误?如果您没有遇到同样的错误,我认为该问题与INCLUDE environment variables 无关。至于我,当我在 vs 安装程序中安装工具Windows Universal CRT SDK 时,msbuild 会自动加载这些路径。
  • 所以请在专业版中打开Developer command prompt,然后输入echo %INCLUDE%,你能看到这些路径吗?如果没有,请我认为您的 vs 环境中存在一些错误。所以请按照我上面说的做一些维修。
  • 我就是通过这样做得到了原始帖子的 INCLUDE=... 部分。开发人员命令提示符设置的 INCLUDE env var 中的路径是正确的。路径存在并包含正确的文件。 VS Pro 的 MSBuild 只是拒绝使用它们。
【解决方案2】:

改用IncludePath 环境变量。

set IncludePath=%INCLUDE%

IncludePath 在运行msbuild 时不会被忽略/覆盖,我可以通过设置成功编译我的项目/解决方案。

在我的机器上,设置 IncludePath 会覆盖 3 条路径,否则这些路径会被设置。这 3 条路径在我的 %INCLUDE% 路径中有类似物(相同的头文件,但版本不同),因此忽略/破坏/忽略这些似乎是安全的(实际上也是谨慎的)。

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-10-15
    • 2017-12-14
    • 2012-12-03
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多