Visual Studio解决方案文件夹作为实际文件夹。

178

我有一个 Visual Studio 解决方案。目前,它是一个空解决方案(即没有项目),我已经添加了一些解决方案文件夹。

解决方案文件夹似乎只是“虚拟文件夹”,因为它们并没有真正地在文件系统中创建,而解决方案文件夹中的文件只是坐落在与 .sln 文件相同的文件夹中。

是否有一个设置被忽视了,可以告诉 Visual Studio 将解决方案文件夹视为“真实”文件夹,也就是说,在我将文件移动到这些文件夹中的一个时,它会在文件系统中创建该文件夹并将文件移到其中?

编辑:谢谢。接下来我将为 VS2010 提出建议 :)


106
这是Visual Studio中最烦人的怪癖之一。 - Andy White
我该如何正确处理这个怪癖? - hellboy
有趣的是,Rider 有这个功能(但文件夹必须与 .sln 文件在同一路径下,并且实际文件夹引用未存储在 .sln 文件本身中):https://www.jetbrains.com/help/rider/Extending_Your_Solution.html - rsenna
1
我正在使用VS 2017,据我所知,微软尚未添加一项功能,允许将整个文件夹添加到解决方案文件夹中 - 只能添加单个文件。 - Theo
19个回答

3
Visual Studio不支持此功能。我制作了一个扩展程序,可以在VS2013中实现类似的功能。它将解决方案文件夹映射到硬盘上的物理文件夹,但是映射是单向的(从硬盘到解决方案)。这意味着解决方案文件夹的内容将反映硬盘文件夹的内容,而不是相反。
除此之外,该扩展程序仍然可能有用。它支持将解决方案文件夹映射到物理文件夹,基于正则表达式过滤文件和目录,并在.sln文件中记住映射。属性是非侵入性的,因此没有安装该扩展程序的开发人员仍然可以打开sln文件而不会受到影响。
托管在Visual Studio Gallery上: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd 编辑:上传到Bitbucket。现在是开源的。MIT许可证。 https://bitbucket.org/LSS_NorthWind/physical-solution-folders

3
创建“解决方案文件夹”。这将创建一个逻辑文件夹,但不是实际的文件夹。 右键单击解决方案文件夹并打开新项目对话框。但在点击“确定”之前,您需要将项目位置更改为所需的物理文件夹,Visual Studio 将创建它并将项目放置其中。

2

您可以通过在Visual Studio项目文件中选择“添加新筛选器”来添加真实的文件夹。您也可以在现有文件夹下执行“添加新筛选器”。创建文件夹后,重命名它并添加适合您项目的源文件、头文件或其他文件。这是我所知道的一种通过Visual Studio IDE创建真实文件夹的方法。


此功能仅适用于C++项目。 - Tamir Daniely
此解决方案也适用于VS项目——问题是关于解决方案级别的文件夹。 - Theo

1

注意:这是可能的,你可以在根目录下创建一个文件夹,但有点棘手...

通过付出额外的努力,你可以做到。怎么做呢?请按照以下步骤进行:

  • 1-创建文件夹,例如:"newfolder"(位于.sln文件所在的根目录)。
  • 2-将项目复制并粘贴到该文件夹中。
  • 3-进入sln文件,找到已移动的项目,并在移动的项目地址中添加newfolder\。
  • 4-保存sln文件。
  • 5-打开你的项目并在Git或其他地方提交库。
  • 6-在新的位置上获取存储库。

    完成了...

如果你仍然无法看到你的文件夹 -----

  • 1-添加一个解决方案文件夹xyz。
  • 2-打开sln文件并将该文件夹名称更改为你的文件夹名称。

恭喜你,你完成了...

如果你遇到任何问题,请写信给我寻求帮助...


这是有关如何移动项目文件夹的说明,而OP询问如何在解决方案下显示其他目录,而不静态列出所有文件。 - Robert Synoradzki

1
我自己也曾经想过要这个功能,但是归根结底,你真的不想拥有这个能力。将你的解决方案(文件)视为 Web 应用程序的根,将解决方案文件夹视为虚拟目录(字面上和功能上)。Web 虚拟目录的内容可以实际上位于完全不同的服务器上。Visual Studio 对解决方案文件夹概念的混淆在于允许您在文件夹内创建新文件。添加内容时,您应始终选择“添加现有项”。添加现有项会创建到文件源位置的链接。
但是,您不希望解决方案文件夹像“物理”文件夹一样工作的原因是,您的解决方案布局可能不一定使用与源代码控制布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以按任何方式将项目和项分组,然后再次决定不喜欢它并再次更改,而无需移动源代码控制项并使您的团队感到烦恼。

4
他们本可以轻松实现虚拟和物理文件夹的功能,这显然是一个疏忽。参考其他所有的IDE工具。 - Tamir Daniely
6
我完全不理解为什么 (IIS) 虚拟目录的概念与解决方案文件夹有任何关系。至于源代码控制的争论,我看不出有什么问题。为什么文件移动会让你的团队感到烦恼?这是一项常见的操作。而且,为什么你希望源代码控制中的文件布局与物理布局不同呢? - user247702
2
物理解决方案文件夹将使创建现代文件夹结构变得更加容易(尽管只是一点点),例如NancyFx的,其中多个项目分为类别,如srctesttools等。您肯定希望在项目开始时做出这个决定,以避免烦恼团队,但这对于大多数架构决策都是正确的。 - Eric Eskildsen
3
我的使用场景是这样的:有时候我们只想将特定文档添加到解决方案中。它们不会被构建,但会被保存在源代码控制中。通常我们会为它们指定一个特殊的文件夹。我想在我的解决方案中有那个文件夹 - 不是它所包含的文件,而是文件夹本身。是的,有绕过此限制的方法,但它们并不是最优解。在解决方案中实际引用一个文件夹就能正常工作。 - rsenna
1
@PaulEaster,不,我给你点踩是因为你简单地推托了这个问题,就好像它不重要一样。你没有意识到所请求的东西的有用性,现在你也没有意识到我们给你的真实反馈。 - rsenna
显示剩余12条评论

0

我有一个解决方法(不是很好,但它能用)。

  1. 在你的解决方案中创建一个文件夹(例如“Contoso”)
  2. 右键单击解决方案,然后单击“在解决方案资源管理器中打开文件夹”
  3. 在解决方案目录中创建物理文件夹(例如“Contoso”)
  4. 将文件复制/创建到物理文件夹中。
  5. 将文件拖入解决方案资源管理器中的虚拟文件夹中。

这个方法不是很好,因为你需要手动维护文件引用,但对我来说它能用。


0

如所述,解决方案下创建的文件夹将是虚拟的。也许这可以称为一种解决方法,但您可以在添加新项目/工程之前或同时在磁盘上物理创建文件夹,并且 Robert 应该是您父亲的兄弟。

附言- 仔细看看,也许我应该解释一下“Bob's your uncle”的意思是你很好/解决了。


0

是的,在Visual Studio 2019中可以实现该项目

虽然这是一个老话题,但我会添加我的答案,因为我遇到了同样的问题并寻找解决方案,但似乎每个人都100%确定没有办法做到。所以我开始尝试使用VS 2019,尝试了很多设置,并最终找到了方法。

只需1个按钮 :D

您只需要点击1个按钮-显示所有文件,就可以看到Visual Studio解决方案的物理结构:
VS 2019 - Show All Files Button

现在,您可以将文件和文件夹添加到项目中,它们将被添加到文件系统(物理上)

右键单击您的项目 → 添加新建文件夹
请注意,选项已从新建筛选器更改为新建文件夹
VS 2019 Add Folder Menu

C++的建议

  1. 在项目目录中创建一个根文件夹,其中包含所有应用程序相关的内容(代码、头文件、数据、库等)。我将其命名为Project
  2. 按照您想要构建代码的结构添加子文件夹。我喜欢以下布局includesrcdatalibs

Recommended VS 2019 Project Structure

  1. 现在设置Visual Studio将这些文件夹识别为头文件和源代码目录。
    1. 在解决方案资源管理器中单击您的项目。请注意,在我的情况下,它是 CrazyDemo,而不是
      Solution 'CreazyDemo' (1 of 1 project)
    2. 转到项目属性菜单:ProjectProperties
    3. 打开Configuration PropertiesVC++ Directories选项卡
    4. 编辑Include Directories并设置为$(ProjectDir)/Project/include;$(IncludePath)
    5. 编辑Library Directories并设置为$(ProjectDir)/Project/libs;$(LibraryPath)
    6. 编辑Source Directories并设置为$(ProjectDir)/Project/src;$(SourcePath)

VS 2019 Recommended Project Properties

  1. 如果您想专注于一个项目,可以使用“Scope to This”选项。只需右键单击“Project”文件夹,然后按下“Scope to This”即可。
    • 请注意,在执行此操作后,要打开“Project Properties”,您需要单击任何项目文件(例如示例中的“main.cpp”),然后单击可编辑客户端区域(例如当您想更改代码时) ,仅在此之后,您才能看到“Project”→“CrazyDemo Properties”选项。[Visual Studio is Insane ‍♂️]

最后,您可能会拥有这样的项目

VS 2019 Recommended Project Example


这个能否保存为模板?或者每次在解决方案中创建新项目时,我都必须经历所有这些步骤吗? - GrantRobertson
我不知道,从未尝试使用模板。 - Rub
1
这仅适用于项目内的文件夹。您不能通过此方法将文件夹用于组合几个项目。 - montonero
@montonero 是的,正如我在答案的第一句话中所述 :) - Rub
嗯,我看到了“项目”这个词,但我没有看到你以任何方式强调这仅适用于项目,所以我已经明确表明了。 - montonero

0
这在Visual Studio 2022中已经得到支持。现在它是一个混合文件夹。
1. 如果你将文件从项目拖到其中,它将在解决方案文件夹中创建一个虚拟引用。 2. 如果你右键点击解决方案,选择添加 -> 新项目,它将在根目录中创建一个文件系统链接到实际文件。

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