Visual Studio 无法打开包含文件,删除路径中的字符

Visual Studio cannot open include file, drops characters from path

我正在使用 Microsoft Visual Studio Professional 2017 构建一个使用 Poco 库的项目。

背景:

不知道这是否相关,但我只想提一下,我手动下载并构建了 Poco(以及所有其他需要的库),多年来一切正常。现在我切换到使用 Miniconda3 来管理我的库,通过 conda install -c conda-forge poco 安装 Poco 并从

更改相关的包含路径
$(POCO_DIR)/Foundation/include
$(POCO_DIR)/Util/include
...

$(CONDA_LIBS)/include

用系统变量$(CONDA_LIBS) = D:\CodeLibraries\conda_libs\Library。这个 CONDA_LIBS 目录存在并包含一个 include/Poco/ 子目录,其中包含所有 Poco 头文件和子目录。

问题:

项目编译正常。我遇到了链接器错误,在深入研究时,我发现了 Visual Studio 2017 的一些奇怪行为:

当我使用任何 Poco 头文件将光标移动到 #include 指令时,例如

#include "Poco/DateTime.h"

我可以通常输入CTRL+SHIFT+G 打开并跳转到相关文件。
这不再有效,我收到一个弹出窗口告诉我

D:\CodeLibraries\conda_libs\Library\include\oco\atetime.h
Cannot open file.

注意 \(P)oco\(D)atetime.h 中缺失的字母。另请注意,文件 已找到 ,但无法 打开

当我尝试使用子目录中的头文件时,例如

#include "Poco/JSON/Parser.h"

我收到消息

D:\CodeLibraries\conda_libs\Library\include\oco\son\rser.h
Cannot open file.

注意 (P)oco\(J)SON\(Pa)rser.h 中缺失的字母 "P"、"J" 和 "Pa"(?!)。

附加信息:


问题:

知道为什么 CTRL+SHIFT+G 快捷方式和拖动- Poco 头文件的删除操作失败?


编辑:
请注意:

"Cannot open File" 错误可能是由于您的项目包含和源路径配置错误或由于第三方扩展,甚至可能是由于 corrupt/buggy IDE,但它与您也提到的链接器错误无关。您还确认文件正在编译,所以这肯定是 IDE 的内置代码导航器或扩展的一些问题。

关于链接器错误,您引用的项目配置、lib 目标、库和头文件版本在链接第三方库时应该匹配。

这些是链接第三方库的一些通用清单:

  1. 运行时库:MT、MTd、MD、MDd 等
  2. 字符集:Unicode 或多字节
  3. 目标编译器
  4. 目标机器
  5. 子系统
  6. 正在使用的第三方库是否有额外的依赖项,您是否正确链接了它们的确切版本。

这些是特定于 POCO 的清单:

  1. 您在头文件与链接器路径中引用的 POCO 版本 配置。

  2. 您链接项目所针对的 OpenSSL 版本,如果您是 使用 POCO 的 SSL、Crypto 和 NET 模块。

我的机器上的相同设置(但为 VisualStudio 2017 目标配置了 VisualStudio 2019)工作正常。

在 Windows 中,您应该使用“\”作为目录分隔符,而不是“/”。

我的猜测是VS把你的“/”换成了“\”,那么每个单词的第一个字母都是非转义字符。

尝试用“\\”替换您的“/”。

奇数。

今天回到办公室后,我想再次调查一下,看看是否可以找到更多关于 IntelliSense 未找到 POCO headers 以及奇怪的 dropping-characters 事情的信息错误消息,但现在有效:
是的,我可以再次跳转到 POCO header 文件,方法是将光标移动到 #include 行并点击 CTRL+SHIFT+G

不知道是通过重新启动 VS 来修复这个问题,还是修复了链接器错误——顺便说一句,这是微不足道的,我什至可能在写这个问题的时候就在旁边做了。不幸的是,我要么在链接器修复后没有重新检查损坏的 IntelliSense 行为,要么没有费心记录 IntelliSense 之后仍然损坏。
所以:恐怕没有真正的关闭。


编辑: Ramesh Kambadaasan's answer 建议解决方法可能是删除 IntelliSense 数据库文件并重新启动 VS 以强制项目 re-parse .下次我试试。