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"(?!)。
附加信息:
- 当我从 拖放 一个 Poco 头文件从 Windows Explorer 到 Visual Studio 时弹出同样的错误(!)
- 我可以从 打开文件 对话框打开这些文件 (CTRL+O)
- 我仍然可以使用 CTRL+SHIFT+G 快捷方式打开我自己的我项目中的头文件,并打开其他库头文件,如
gdal.h
或 boost headers
- 如果我
#include "oco/ateTime.h"
(注意丢失的字母)并尝试通过 CTRL+SHIFT+[= 打开它70=]G 我收到预期的消息 "File 'oco/ateTime.h' not found in current source file's directory or in build system paths",下面列出的路径包括 D:\CodeLibraries\conda_libs\Library/include
.
问题:
知道为什么 CTRL+SHIFT+G 快捷方式和拖动- Poco 头文件的删除操作失败?
编辑:
请注意:
- 我不是在问一般的 "File not found" 错误:我通常可以很好地处理我的包含和库路径,谢谢
- 斜杠和反斜杠在 Visual Studio 中几乎可以互换使用,至少在过去的几年里
"Cannot open File" 错误可能是由于您的项目包含和源路径配置错误或由于第三方扩展,甚至可能是由于 corrupt/buggy IDE,但它与您也提到的链接器错误无关。您还确认文件正在编译,所以这肯定是 IDE 的内置代码导航器或扩展的一些问题。
关于链接器错误,您引用的项目配置、lib 目标、库和头文件版本在链接第三方库时应该匹配。
这些是链接第三方库的一些通用清单:
- 运行时库:MT、MTd、MD、MDd 等
- 字符集:Unicode 或多字节
- 目标编译器
- 目标机器
- 子系统
- 正在使用的第三方库是否有额外的依赖项,您是否正确链接了它们的确切版本。
这些是特定于 POCO 的清单:
您在头文件与链接器路径中引用的 POCO 版本
配置。
您链接项目所针对的 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 .下次我试试。
我正在使用 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"(?!)。
附加信息:
- 当我从 拖放 一个 Poco 头文件从 Windows Explorer 到 Visual Studio 时弹出同样的错误(!)
- 我可以从 打开文件 对话框打开这些文件 (CTRL+O)
- 我仍然可以使用 CTRL+SHIFT+G 快捷方式打开我自己的我项目中的头文件,并打开其他库头文件,如
gdal.h
或 boost headers - 如果我
#include "oco/ateTime.h"
(注意丢失的字母)并尝试通过 CTRL+SHIFT+[= 打开它70=]G 我收到预期的消息 "File 'oco/ateTime.h' not found in current source file's directory or in build system paths",下面列出的路径包括D:\CodeLibraries\conda_libs\Library/include
.
问题:
知道为什么 CTRL+SHIFT+G 快捷方式和拖动- Poco 头文件的删除操作失败?
编辑:
请注意:
- 我不是在问一般的 "File not found" 错误:我通常可以很好地处理我的包含和库路径,谢谢
- 斜杠和反斜杠在 Visual Studio 中几乎可以互换使用,至少在过去的几年里
"Cannot open File" 错误可能是由于您的项目包含和源路径配置错误或由于第三方扩展,甚至可能是由于 corrupt/buggy IDE,但它与您也提到的链接器错误无关。您还确认文件正在编译,所以这肯定是 IDE 的内置代码导航器或扩展的一些问题。
关于链接器错误,您引用的项目配置、lib 目标、库和头文件版本在链接第三方库时应该匹配。
这些是链接第三方库的一些通用清单:
- 运行时库:MT、MTd、MD、MDd 等
- 字符集:Unicode 或多字节
- 目标编译器
- 目标机器
- 子系统
- 正在使用的第三方库是否有额外的依赖项,您是否正确链接了它们的确切版本。
这些是特定于 POCO 的清单:
您在头文件与链接器路径中引用的 POCO 版本 配置。
您链接项目所针对的 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 .下次我试试。