智能感知无法打开源文件

8
我开始在我的大学担任研究员,并被指示使用内部开发的C++框架为现有应用程序开发组件。目前,我正在努力在Visual Studio 2017中正确设置项目。每当我尝试包含框架中的文件时,IntelliSense会抱怨无法打开该文件。然而,以下事情增加了问题的奇怪性:解决方案属性已正确设置;项目可以编译而不出现任何问题;写入“#include”指令时,IntelliSense建议正确的相对路径到头文件(即#include );我可以使用“打开文档“class.h””对话框从引用它的源文件中打开头文件。我已经遇到过这个问题:

到目前为止,没有什么解决我的问题。有人遇到过这个问题吗?

TL;DR

  • 一切都编译得很好。
  • “C/C++ -> General -> Additional Include Directories”已正确设置。
  • “VC++ Directories -> Include Directories”也已经设置好了。
  • 当编写包含指令时,IntelliSense正确地建议头文件。
  • 但是,IntelliSense据报无法打开该文件,因此无法对其进行索引。
  • 我被一个花哨但占用资源的文本编辑器所困扰。

编辑:

我正在 MacBook "13 2016 上工作;通过 Bootcamp 安装了 Windows 10 Pro 64 位。


你是否为当前活动的配置和平台设置项目属性?错误列表窗口中是否有任何错误消息? - Alan Birtles
抱歉回复晚了。我确保为每个“风味”正确配置了它。你所说的“错误消息在错误列表窗口中”是什么意思?如果是指列出所有编译错误的对话框,那么没有任何消息。该项目编译良好并且符合预期(即正确)。 - Julian Kirsch
在这个特定的设备上,我不使用WSL。它是通过Bootcamp进行的Windows 10干净安装,并且安装了Visual Studio 2017 Community。 - Julian Kirsch
1
我曾经遇到过类似的问题(但如果您不使用WSL,则可能与此无关,因此不建议将其作为答案)。在我的情况下,这是由于区分大小写的文件夹名称引起的,这在Windows上显然是可能的。Intellisense试图打开C:\ WORKSPACEPATH \ PROJECTDIR \ MYFILE.cpp(即所有大写字母),并报告文件不存在,因为C:\ WORKSPACEPATH被设置为区分大小写,并且实际上是C:\ workspacepath。在我的情况下,这是因为我通过WSL创建了该文件夹。请参见[此处](https://www.auslogics.com/en/articles/enable-case-sensitive-file-and-folder-names/) - yothsoggoth
@yothsoggoth,感谢您发布了那个帖子,尽管那不是他的问题。那正是我的问题! - cylus
显示剩余3条评论
3个回答

5
这个问题的原因是Windows现在有了使文件夹区分大小写的选项,而Intellisense会改变它尝试打开的文件的大小写。Intellisense试图使用类似C:\WORKSPACEPATH\PROJECTDIR\MYFILE.cpp(即全部大写)的路径,但如果C:\workspace(或路径中的任何其他目录)被设置为区分大小写并且不完全匹配,则找不到该文件。
在我的情况下,这是因为我通过WSL创建了文件夹,默认情况下,WSL会对其创建的所有新目录(包括通过git clone等方式创建的目录)启用区分大小写。请参见此处
简单解决方法
可以通过运行以下命令来解决此问题:
fsutil file setCaseSensitiveInfo <directory> disable

更多命令

您可以通过运行以下命令检查文件夹是否启用了大小写敏感:

fsutil file queryCaseSensitiveInfo <directory>

最后,一个方便的一行代码可以递归地禁用它:

for /r /d %f in (.) do (fsutil file setCaseSensitiveInfo %f disable)

(此信息最初是作为对原问题的评论发布的,后来证实这实际上是同一个问题。请查看评论以获取其他人的意见。)

我会强调“或路径中的任何其他目录”,因为在意识到不仅是克隆的项目目录区分大小写,而且项目所在的目录后,我才能让它正常工作。因此,如果Intellisense没有看到文件的全大写版本,请检查所有父文件夹直到根目录。 - stoper
1
请注意,即使使用Visual Studio Code,人们似乎也很难解决此问题:https://github.com/microsoft/vscode-cpptools/issues/1994,但在Visual Studio C++中,我从Intellisense收到了错误E1696(路径以大写字母给出,如答案中所述)。 - stoper
需要同时禁用父级。例如 D:\A D:\A\B .... D:\A\B\C\D\E - Trương Quốc Khánh

0

我在使用SysGCC进行交叉编译时,遇到了与Visual Studio Code及其Intellisense C++扩展相关的问题。

VS code IntelliSense插件无法找到源文件。我已经使用'fsutil'命令将'C:\SysGCC...'和检出的源代码目录设置为“区分大小写”(以避免与Linux区分大小写的文件发生命名冲突)。因此,您也可以使用'fsutils'关闭目录的大小写敏感性,这可能有所帮助。

(根据VSCode-CppTools和检查“是否区分大小写”的选项C_Cpp.caseSensitiveFileSupport,他们也提供了相应的解决方案。)


1
如果您认为这并没有回答问题,请删除此内容。然而,最后一句话似乎包含了一个答案,或者至少是一个开端。如果您能根据[答案]编辑此帖子,那就太好了! - Adriaan
我删除了你认为这是一条评论的内容。如果你仍然认为是评论,请删除该帖子。我想避免给其他人留下评论作为答案的印象。 - Yunnosch

0

针对在Visual Studio 2022中打开Linux项目的问题,我尝试了@yothsoggoth提供的解决方案,虽然这个方法很有道理,但是不幸的是并没有奏效。
我发现Visual Studio甚至无法使用F12打开标准库中的C++文件,但它可以打开其他库中的文件。
所以在我的情况下,解决方案是关闭Visual Studio,备份作为缓存工作的文件夹。 将C:\Users\[user]\AppData\Local\Microsoft\Linux复制到C:\Users\[user]\AppData\Local\Microsoft\Linux.bak
然后重新打开Visual Studio,并让CMake重新生成缓存。
现在错误已经消失了,我甚至可以使用F12打开C++ std库中的<string>等文件。
希望这个解决方法能帮助到其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接