关于C#:Visual Studio 2017项目中的文件夹

Visual Studio 2017 Folders in Project

我正在使用Visual Studio 2017在C中编写一些内容。当我打开一个新项目时,我有一些默认过滤器,并且该项目的"添加"选项中只有过滤器,没有文件夹/目录。

我希望我的项目具有文件夹结构,但是不能在Visual Studio中将文件夹添加到项目中。联机查看时,我只能找到将现有文件夹添加到项目而不添加新文件夹的解决方案。

如何将新文件夹添加到Visual Studio C项目中?

如何禁用过滤器?


我对Visual Studio 2017(以及IDE的早期版本)及其在"文件视图"中的文件表示的看法是一种虚拟文件组织系统。 File View使您可以逻辑地组织文件,以更有用的方式展示实际的文件系统。

在"文件视图"中看起来像文件夹的图标并不是真正的文件夹,而是标签,称为过滤器,它使您可以根据自己的喜好对文件进行分组,而不管它们在物理上如何存储在持久性存储区中,例如硬盘驱动器。

过滤器更加灵活,因为它们不对应于物理文件文件夹的层次结构,因为它们使您可以将单个文件夹中的所有文件组织为逻辑组。与将文件夹中的文件分组通常使用的过滤器相比,过滤器允许以更精细的粒度来完成此操作。筛选器还允许您将多个文件夹中的文件分组到文件视图中的单个逻辑文件夹中。

但是,由于我们大多数人都习惯于文件夹层次结构,因此筛选器可能会使混乱,以至于筛选器方法可以断开筛选器中表示的逻辑文件与文件夹中物理文件位置的连接。

我添加文件的典型方法

通常,我要做的是通过Windows创建物理文件夹,或者对现有Git或Subversion或VS Team Services源树进行克隆。对于新内容,我可以使用"新解决方案"或"新项目"向导创建我的初始起点,然后通过Windows物理地组织和添加文件和文件夹,然后进入Visual Studio IDE创建过滤器,然后将现有文件添加到过滤器。在某些情况下,我将在过滤器中创建子过滤器,以便更好地组织物理文件夹中的文件。

对于新文件,我将仅使用Add New Item菜单选项将该项添加到适当的项目中。如果右键单击过滤器名称,则新文件将自动添加到过滤器中。在某些情况下,当我向项目中添加了其他过滤器以组织文件时,我会将新创建的项目拖到适当的过滤器中,然后放到那里。

此拖放操作不会更改文件的物理位置,而是通过将其从一个过滤器移动到另一个过滤器来更改其逻辑位置。要将文件从一个文件夹物理移动到另一个文件夹,通常我会使用Windows。只需记住,如果您确实使用Windows来移动文件,则还必须在文件已分配给的Visual Studio 2017过滤器中修改文件的条目,我通常在文件上执行Remove然后是Add Existing Item并浏览到它的新位置。

似乎在同一项目中的多个过滤器中不能有相同的文件。

在某些情况下,当我Add New Item时,我将使用Browse按钮从在Add New Item对话框中显示的建议文件夹更改为其他文件夹。而且,如果我需要对该文件使用不同的扩展名,那么我也会对此进行更改,这是在将新的C源文件添加到项目中时需要将.cpp扩展名更改为.c的常见操作。

如果您喜欢使用在显示的文件和文件夹列表中单击鼠标右键时显示??的右键菜单,还可以使用Browse按钮导航到一个文件夹,然后可以在其中创建新文件夹。

不幸的是,Add New Item对话框始终希望将文件与所有其他文件一起放入项目目录。 Add Class向导没有给您机会指定默认项目文件夹以外的任何内容。在某些情况下,我已经使用Visual Studio IDE创建了C类,将其从项目中删除,将物理文件移动到我想要的位置,然后将它们添加回项目中。

过滤器方法似乎很好用,因为整个解决方案分为多个项目,每个项目都有自己的物理文件夹。多个项目可能对应于解决方案使用的特定DLL或静态库或其他组件。

另请参见是否可以将Visual Studio配置为在C项目中使用真实文件夹而不是过滤器?

文件夹和过滤器的屏幕截图示例

这是正在使用的资源的小项目的Windows文件夹视图:

screenshot

此外,名为PepIncludes的过滤器对应于实际的相同物理文件夹,而名为" Header Files"和" Source Files"的过滤器是文件组,它们均位于同一物理文件夹中,该物理文件夹与项目相同文件夹。

以下屏幕截图显示了过滤器如何提供灵活性。我有一个包含包含文件PepIncludes的文件夹,并且在此Visual Studio 2017解决方案中的两个不同项目中有相同的文件集合。在具有30或40个项目的解决方案中,这可以使文件管理变得更加容易。例如,您可以看到,在修改文件" ECR.h"之后,两个文件列表(名称旁边的小红色复选标记)都显示了已被修改的事实。

screenshow