在Visual Studio中丢失了项目目录结构?

10

我正在学习Visual Studio 2015 Community。我是一名经验丰富的程序员,但对VS还不熟悉,文件结构让我感到困惑。我已创建了一个解决方案,并添加了现有项目。在“解决方案资源管理器”中,VS会将所有的项目文件(在我的情况下是C++项目,即.c.cpp.h文件)显示在同一层级的树形结构中。

相比之下,如果我在类似Sublime Text、VS Code、Notepad++等编辑器中打开该项目,则可以看到与磁盘驱动器上的实际目录结构相同的目录结构;就像在文件浏览器/ Finder或终端中使用ls/dir命令看到的那样。

在发布问题之前,我已做好功课。在以下帖子中,@Andrey表示:

  

恐怕在MSVS中没有“目录结构”这样的概念。此外,MSVS并不真正需要它,因为它使用平面项目,层次结构是基于项目级别而不是文件/目录级别的。

     

由于不存在这种东西,您既不能自动获得它,也不能手动获得它。MSVS有解决方案文件夹,但这是完全不同的东西,并且将实际文件夹表示为解决方案文件夹没有太多意义。

Visual Studio as Code Browser:如何保留目录结构?

这是真的吗?文件的排列方式非常重要,而VS的平面表示使得项目更难理解;文件在目录结构中的位置很重要。有没有一种方法可以在VS中查看正确的目录结构?

在我的情况下,我正在使用支持多个版本(4.0、4.1、4.2等)的Quickfix。每个版本都有具有相同名称的不同类和文件。

正如下面的屏幕截图所示,它们都被整齐地排列在磁盘上的不同文件夹中,但是VS对这些文件的表示方式非常令人困惑:

在此输入图片描述

在此输入图片描述


你可以在“解决方案资源管理器”中创建文件夹,这是我在项目中经常使用的方法。话虽如此,我使用了CMake来生成我的项目。我让CMake为源代码中的大多数文件夹添加解决方案文件夹,但它并不完全匹配目录结构。 - drescherjm
一个已经有目录结构排列好的大型项目能否被导入,然后在VS中自动创建相应的文件夹? - kmiklas
我不知道没有CMake的方式。 - drescherjm
可能是Visual Studio作为代码浏览器:如何保留目录结构?的重复问题。 - 463035818_is_not_a_number
1个回答

7
我发现下面线程中@Paul Easter给出的答案非常有帮助,可以更好地理解这个“怪癖”,实际上是一个“特性”。这里涉及到一个不同的项目结构概念:
但是,你不希望解决方案文件夹像“物理”文件夹一样运行的原因是,你的解决方案布局可能并不一定使用与源代码控制布局相同的约定。解决方案文件夹允许你自定义项目的层次结构,以便你可以按照自己的喜好将项目和项分组,然后决定不喜欢它并再次更改它,而无需经历移动源代码控制项并激怒其余团队成员的噩梦。 Visual Studio Solutions Folder as real Folders

这是一个好主意吗?我能理解为什么有些人会喜欢它,因为它允许他们按照自己的方式安排项目文件。但目前为止,我不喜欢它;我相信部分原因是因为它对我来说是新的,但也有以下两个原因:
1. 在组织良好的项目中,目录层次结构并不是任意的;首席工程师以某种方式安排文件,有很好的理由。
2. 它在VS文件表示和操作系统结构之间添加了一层抽象。我喜欢直接访问我正在处理的文件;使用VS系统时,我感到与VS中的基础文件奇怪而神秘地断开连接。我必须承认,我担心这个层会有其异常,并会给我带来问题。


我发现学习Visual C++非常复杂。难怪Java如此流行。我现在正在努力弄清楚#include "ABC/ABC_Client.h"是什么意思。文件夹又回到议程上了吗?我以为前缀是解决方法。 - Peter L
一个#include语句会做到这一点:将一个文件包含到另一个文件中。可以把它看作是一个大的复制和粘贴。在这种情况下,你正在将文件ABC_Client.h包含到位于目录ABC中的文件中。请注意,引号(")表示本地包含,而尖括号(如#include <iostream>)表示从系统路径中包含,通常在Linux上是类似于/usr/local的东西。 - kmiklas
1
关于你的元话题,是的,C++ 可能很复杂,但好处是它快速、强大且薪资高。不要因此讨厌我,但是,信不信由你,一段时间后,它开始变得美丽起来。这种疯狂的方法有其奥秘 - 坚持下去,你可以掌握它 :D - kmiklas
感谢@kmiklas。这很鼓舞人心。此外,我了解了宏和文件路径,并且VS正在遍历路径,寻找ABC文件夹中的ABC_Client.h。这是一个小胜利。 - Peter L
1
干得好,彼得。我现在给你的建议是在Hackerrank上完成所有C++练习。然后转到算法部分,并用C++编写它们。这些不仅是很棒的问题:按难度顺序结构化,涉及许多关键点,而且对于大多数公司来说,面试过程中的第一个门槛就是Hackerrank问题。: ^) https://www.hackerrank.com/ - kmiklas

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