153

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

解决方案文件夹似乎只是“虚拟文件夹”,因为它们并不是真正在文件系统中创建的,解决方案文件夹中的文件只是与 .sln 文件位于同一文件夹中。

是否有一个我忽略的设置告诉 Visual Studio 将解决方案文件夹视为“真实”文件夹,即在文件系统中创建它们并在我将解决方案中的文件移动到其中一个文件夹时将文件移动到其中?

编辑:谢谢。那就给VS2010提个建议吧:)

4

18 回答 18

52

一种解决方法,它实际上按预期运行

  1. 网站或现有网站添加到解决方案。(我通常创建一个新的。)
  2. 只要确保它是在您的解决方案文件夹中创建的。(有时我什至会创建一个指向外部文件夹的“链接”,例如网络共享上的“Docs”或“Marketing”。在这种情况下,Git 当然会忽略它。)
  3. 确保转到“项目”设置或配置管理器以从构建和部署中排除此“网站”

完毕。现在解决方案资源管理器将反映文件系统中的任何更改,反之亦然(包括子文件夹)。

我(想念)将它用于团队内部共享的规范、文档、PM 和一些 DevOps 脚本。很容易选择,在源代码管理中包含或不包含什么,并且(如果设置正确)它不会与构建冲突。

我知道该功能不适用于该用例,但除了可能具有误导性的“项目”图标之外,我还没有发现该 hack 的任何不足之处。还有一些用例,其中 VS 提供的经典(虚拟)解决方案文件夹适合图片。你怎么看?

于 2016-05-05T09:43:33.220 回答
49

无特殊设置。我不认为它被支持。

您可以在解决方案的“项目”中创建真正的文件夹,但不能在解决方案本身中创建。

于 2008-11-05T23:58:45.187 回答
43

在 Visual Studio 2017 中,单击解决方案资源管理器窗口中的“解决方案和文件夹”图标。此按钮从虚拟“解决方案”视图切换到与文件系统上的文件夹和文件布局相匹配的“源视图”。添加新文件夹时,该文件夹是在预期位置物理创建的。 解决方案和文件夹.

于 2018-01-17T13:29:07.183 回答
11

选择的答案表明可以使用实际项目而不是解决方案文件夹,但并没有真正解释如何。我想我在这里描述的可能是实现这一目标的最不尴尬的方式...... :-P

常规项目文件的问题是它们最终将由MSBUILD. 如果你想要一个只包含不可编译文件的项目,那是一个问题。

但是前段时间 Visual Studio 引入了一种新的项目类型:共享项目(.shproj 扩展名)。默认情况下不会编译此项目类型,但仅当(且仅当)它被另一个项目引用时。

所以这里的诀窍之一是使用共享项目而不是解决方案文件夹。显然可以添加一个从未被任何其他项目引用的共享项目,这意味着我们可以避免上述问题。

然后,通过<None Include="**/*" />在 .shproj 文件中使用子句,我们可以使其自动反映任何新文件和/或子文件夹。

所以基本上这样做:

  • 在您的解决方案中创建一个新文件夹。
  • 在这个新文件夹的根目录下添加一个新的 .shproj 文件。
  • 在您的解决方案中引用新的 .shproj。

例如,在我的例子中,我创建了一个 DockerDev.shproj,因此我可以将一些仅在我们的开发机器上运行的与 docker 相关的脚本分组:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

此 .shproj 文件将跟踪我的解决方案中此新文件夹的任何子文件夹任何文件。DockerDev

据我所知,这个解决方案的工作原理与 OP 所要求的非常相似:它将作为对文件夹的不可编译引用,并且会自动反映对其所做的任何更改。

于 2019-04-14T13:47:41.107 回答
8

Sara Ford 贡献了一个宏来添加这样做。在 Visual Studio 2010 中,如果您打开宏资源管理器,您将看到一个名为“GenerateSlnFolderOnDirStructure”的宏。这将自动创建解决方案文件夹并添加文件。

于 2012-08-29T18:59:35.470 回答
7

Cecilia Wirén 的文件夹到解决方案文件夹 - CeciliaSHARP

消除将多个文件添加到解决方案文件夹的麻烦。只需使用解决方案的上下文菜单,然后在创建新解决方案文件夹的选项下方,您现在可以找到“将文件夹添加为解决方案文件夹”。这将创建一个与您选择的名称相同的解决方案文件夹,并将该文件夹内的项目添加到解决方案文件夹中。这不会移动磁盘上的文件。

于 2017-01-27T19:36:15.770 回答
5

不,不支持。正如您所怀疑的,解决方案文件夹只是 .sln 文件中的虚拟子条目,与文件系统无关。

于 2008-11-06T00:04:35.783 回答
4

您可以同步新的解决方案文件夹嵌套级别,也可以使用实际的文件系统文件夹命名,它就像一个魅力!

现有项目:

  • 创建实际文件夹
  • 使用完全相同的名称创建解决方案文件夹
  • 将您的项目文件夹复制到新文件夹中(实际文件系统)
  • (在解决方案资源管理器中) - 右键单击​​同一文件夹
  • 添加 => 现有项目

添加新项目:

  • 创建您的解决方案文件夹
  • (右键单击解决方案)=> 添加新项目
  • 将要添加的项目名称下的位置地址更改为解决方案文件夹中完全相同的地址
于 2021-09-18T19:23:54.687 回答
3

Visual Studio 对此不提供支持。我做了一个扩展,它对 VS2013 做了类似的事情。它将解决方案文件夹映射到硬盘驱动器上的物理文件夹,尽管映射是一种方式(从硬盘驱动器到解决方案)。这意味着解决方案文件夹的内容将反映硬盘驱动器文件夹的内容,而不是相反。

有了这个,扩展可能仍然有用。它支持将解决方案文件夹映射到物理文件夹、基于正则表达式过滤文件和目录以及记住 .sln 文件中的映射。属性是非侵入性的,因此没有扩展的开发人员仍然可以打开 sln 而不会受到影响。

托管在视觉工作室画廊: https ://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b​​300-044dd21f02bd

编辑:上传到 bitbucket。现在开源。麻省理工学院许可证。https://bitbucket.org/LSS_NorthWind/physical-solution-folders

于 2015-05-04T15:56:04.490 回答
3

注意:是的,您可以在根目录上创建一个文件夹,但它有点棘手......

通过付出一些额外的努力,你可以做到如何?让我们按照步骤——

  • 1-创建文件夹,例如:根目录上的“ newfolder ”(您的 .sln 文件所在的位置)。
  • 2.将您的项目复制并粘贴到文件夹中。
  • 3.转到您的 sln 文件并找到已移动的项目并将 newfolder\ 添加到已移动项目的地址中。
  • 4.保存sln文件。
  • 5.打开您的项目并在git中提交存储库...
  • 6.将存储库放在新位置。

    你完成了...

如果您仍然看不到您的文件夹 -----

  • 1.添加解决方案文件夹xyz。
  • 2.打开 sln 文件并用您的文件夹名称更改该文件夹名称。

恭喜你完成了。。

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

于 2017-02-09T11:26:44.867 回答
3

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

于 2017-08-15T15:04:21.863 回答
3

对于Visual Studio 2019 中的 C#,我使用了这种方式(似乎与此答案相似,但至少在 C# 解决方案中不起作用

  1. 在解决方案资源管理器中单击switch views

在此处输入图像描述

  1. 选择folder view

在此处输入图像描述

  1. 您可以将单个文件夹添加到解决方案

在此处输入图像描述

  1. 要返回解决方案资源管理器的常规视图,只需switch views再次单击并选择解决方案。

使用这种方式似乎有一个限制(来自@montonero 的评论):

...只需打开一个包含多个项目的解决方案,然后尝试通过文件夹视图将项目移动到其他一些真实文件夹。问题是 VS 不会更新解决方案文件中项目的路径

于 2021-04-10T10:53:48.027 回答
2

我自己也想要这个功能几次,但归根结底,你真的希望有能力做到这一点。将您的解决方案(文件)视为 Web 应用程序的根,并将解决方案文件夹视为虚拟目录(从字面上和功能上)。Web 虚拟目录的内容可能在物理上完全位于不同的服务器上。Visual Studio 混淆解决方案文件夹概念的地方是允许您在文件夹中创建新文件。添加内容时,您应该始终“添加现有”。添加现有文件时,它会创建指向文件源位置的链接。

但是,您不希望解决方案文件夹表现得像“物理”文件夹的原因是因为您的解决方案布局可能不一定使用与源代码管理布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以以任何您喜欢的方式将项目和项目组合在一起,然后决定您不喜欢它并再次更改它,而不必经历移动源代码管理项目的噩梦周围并激怒团队的其他成员。

于 2014-09-07T22:39:52.707 回答
2

创建一个空解决方案,然后在编辑器中打开 .sln 文件并将这些代码行放在MinimumVisualStudioVersion之后

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"

在 vs 中打开解决方案,您应该向其中添加相同的文件夹,现在您可以看到该文件夹​​并向其中添加一个项目,您在 windows 中有一个真实文件夹,在 vs 中有一个虚拟文件夹

确保您使用该路径创建了项目

于 2020-12-19T09:05:49.607 回答
1

您可以通过为 Visual Studio 项目文件选择“添加新过滤器”来添加真实文件夹。您还可以在现有文件夹下执行“添加新过滤器”。创建文件夹后,将其重命名并添加源文件或头文件或任何适合您项目的文件。这是我知道的一种方法,它可以让我们通过 Visual Studio IDE 创建真正的文件夹。

于 2012-04-03T01:06:48.153 回答
0

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

ps-仔细看看也许我应该解释一下“鲍勃是你的叔叔”的意思是你的罚款/分类。

于 2008-11-06T00:26:44.817 回答
0

我对此有一些解决方法(它不是很好,但它有效)。

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

这不是很好,因为您需要手动维护文件引用,但它对我有用。

于 2015-11-10T11:45:40.570 回答
0

是的,该项目可以在 Visual Studio 2019 中使用

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

1 个按钮:D

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

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

右键单击您的项目 → AddNew Folder
请注意,该选项已更改New FilterNew Folder
VS 2019 添加文件夹菜单

我对 C++ 的推荐

  1. 在项目目录中创建一个根文件夹,其中将包含所有与应用程序相关的内容(代码、标题、数据、库...)。我给它取名Project
  2. 根据您的需要添加子文件夹来构建您的代码。我更喜欢以下布局include、、、、srcdatalibs

推荐的 VS 2019 项目结构

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

VS 2019 推荐项目属性

  1. Scope to This如果您想专注于 1 个项目,您可以使用该选项。只需右键单击Project文件夹并按Scope to This
    • 请注意,在此操作之后,为了打开Project Properties,您需要单击任何项​​目文件(如main.cpp示例中),然后单击可编辑的客户区(如您要更改代码时),然后才可以将能够看到
      Project→<code>CrazyDemo 属性选项。[Visual Studio 疯了 ‍♂️]

最后,你可能有这样的项目

VS 2019 推荐项目示例

于 2021-02-02T06:56:13.847 回答