如何在Visual Studio中“添加现有项”整个目录结构?

791

我手头有一组独立的文件,与任何 C# 项目都没有关联,它们位于一个复杂的嵌套目录结构中。

我想以同样的方式将它们添加到我正在开发的 ASP.NET Web 应用程序的另一个目录中,同时保留相同的目录结构。因此,我将文件夹复制到我的项目的目标位置,并尝试“添加现有项”,但只丢失了先前的文件夹层次结构。

通常,我会手动重新创建目录,逐一复制,然后添加现有项。但在这种情况下,目录和文件实在是太多了。

那么,在 Visual Studio 2008 中如何添加现有的目录和文件呢?


您可能会发现这个问题很有用,它询问如何将解决方案文件夹添加为实际文件夹:https://dev59.com/Q3VC5IYBdhLWcg3whRgw - Richard Garside
18个回答

751

将文件/文件夹从Windows资源管理器拖到解决方案资源管理器中即可全部添加。请注意,如果Visual Studio处于管理员模式下,则此方法无法运行,因为Windows资源管理器是用户模式进程。


45
对我来说这个不起作用,它只是给了我一个无效拖放目标的图标。但下面的显示所有文件却完美运作。 - Cine
119
在VS 2010中,拖动文件夹后,选择项目中的“显示所有文件”选项。这些文件会以“虚化”的形式存在,右键单击文件夹并选择“包含在项目中”。然后它们就会被添加进来了。 - John Ptacek
10
在项目中可以这样做,但在解决方案中不行。 - user1228
2
这个答案对于VS2010来说无效(至少据我所知)。Tom在7/10/12的回答是我在VS2010中最好的解决方案。 - BLSully
8
使用任务管理器结束 explorer.exe 进程,以管理员身份启动它,然后即使 Visual Studio 以管理员身份运行,也可以进行拖放操作。 - xander
显示剩余9条评论

556

启用特定项目的“显示所有文件”选项(您可能需要点击“刷新”才能看到它们)**。

不属于您的项目的文件夹/文件在项目树中会显示为略微“淡一些”的颜色。

右键单击要添加的文件夹/文件,然后单击“包含在项目中”。它将递归地将文件夹/文件添加到该项目中。

** 这些按钮位于小型“解决方案资源管理器”工具栏上。

** 确保您未处于调试模式。


4
如果你将项目文件放在自己的文件夹中,似乎只有对于比项目文件更深层次的文件才适用,否则这将不起作用。 - Danny Parker
34
这仅适用于个别项目,而不适用于解决方案。 - user1228
7
嗯...那不是你应该放文件的地方。当然它找不到超出根目录的文件。 - Bluebaron
4
只有当您希望添加的文件夹位于项目文件夹中时,此方法才有效。在我的情况下,我希望它们位于其他地方(在多个项目之间共享)。在 XCode 中,将文件夹结构从任何位置拖动到项目结构中会保留文件夹结构,而不像 VS 那样将其展开。看起来 VS 在这方面缺少一个功能。 - Mattijs
11
提示 - 确保选择的是项目而不是解决方案,然后您可以执行“显示所有”操作! - niico
显示剩余3条评论

93

在解决方案资源管理器中:

  1. 单击 显示所有文件 (在解决方案资源管理器顶部从左数第二个图标)。
  2. 找到您想要添加的文件夹。
  3. 右键单击并选择 “包含到项目中”

我使用此方法安装诸如HTML编辑器和第三方文件浏览器之类的插件。


17
这与 Brannon 四年前的回答有何不同? - ToolmakerSteve
10
这并没有解决最初的问题,即需要一个名为“Solution”的文件夹。此前也已经讨论过这个问题。 - user2864740
@ToolmakerSteve:它的不同之处在于它与Gant的解决方案相同,只是早在7年前就已经存在了。https://dev59.com/EHRC5IYBdhLWcg3wKtv2 - Veverke
强烈推荐此解决方案,因为它还可以帮助解决已经检入的冲突csproj文件,并且TFS会忽略这些冲突并覆盖它们。 - John Demetriou
它是从左边数起的第三个,而不是第二个。 - user3752718
如果你想要将一个文件夹添加到一个已存在的解决方案文件夹中,这种方法是行不通的,它只适用于解决方案中的项目。 - undefined

37

我想指出之前提供的两个解决方案:

  • 从Windows资源管理器中拖放
  • 显示所有文件然后在项目中添加。

都不能按照问题所要求的保留目录结构来包含文件。

至少在我的情况下(C++/CLI项目Visual Studio 2013,Windows 7),不行。

在Visual Studio中,一旦回到正常视图(非显示所有文件),添加的文件都会列在项目的顶层。

是的,在磁盘上它们仍然位于原地,但在解决方案资源管理器中它们是松散的。

我没有找到除了在解决方案资源管理器中重新创建目录结构,然后在正确的位置进行添加现有项之外的其他方法。


我看到了同样的行为,是在VS2010中,使用c++。 - Radim Cernej
3
同意,它们仍然不同。我想知道一个如VS这样受欢迎且昂贵的软件怎么会缺少这样的功能。我认为在解决方案资源管理器和Windows资源管理器中有两个不同但相似的结构相当令人困惑... - Janis
13
仍然使用2015版,但仍无法保留文件夹结构。感到惊讶。 - Toby Deshane
https://dev59.com/yVgQ5IYBdhLWcg3wSyEO - kmiklas
只能拖放或复制粘贴整个文件夹树(包括子文件夹和文件)来将其添加到项目中。当您尝试将其添加到解决方案文件夹(非项目)时,此方法不适用。 - undefined
显示剩余3条评论

22

起初我并没有完全理解这些描述,但最终我找到了以下方法:

  1. 打开“显示所有文件” - 在解决方案资源管理器工具栏上有一个图标
  2. 使用Windows资源管理器(而不是解决方案资源管理器),将您的文件移动到您想要它们位于的目录结构中
  3. 单击解决方案资源管理器工具栏上的“刷新”
  4. 您已移动的文件应该会出现在您放置它们的解决方案资源管理器树形结构中
  5. 右键单击“幽灵”文件或文件夹,然后单击“包含在项目中”。 文件夹中的所有内容都将被包含

2
这是针对解决方案文件夹而非项目的。 - StingyJack
更新:在VS2019中没有“刷新”按钮。 - Liu Hao

17
下面是 'Show All Files' 的图标,只用于方便参考。

在此输入图片描述


14

在此输入图片描述

点击上方的红色圆圈,您的文件夹将出现在“解决方案资源管理器”中。

右键单击您的文件夹->包含在项目中


10
您可以更改项目的XML以将现有的子文件夹和结构自动添加到您的项目中,例如来自NPM的“node_modules”文件夹:
这适用于旧版MSBuild / Visual Studio版本。
<ItemGroup>
   <Item Include="$([System.IO.Directory]::GetFiles(&quot;$(MSBuildProjectDirectory)\node_modules&quot;,&quot;*&quot;,SearchOption.AllDirectories))"></Item>
</ItemGroup>

对于当前的MSBuild / Visual Studio版本:

只需将其放在xml节点中:

<Project>
</Project>
在这种情况下,只需将 $(MSBuildProjectDirectory)\node_modules 更改为您的文件夹名称即可。

是的,有时手动编辑 *.*proj 文件可以让你达到想要的效果。 - Chris O
2
那么你的意思是有人可以制作一个批量处理的插件吗?因为我不想手动在 XML 中重新创建数十个文件夹的文件结构。 - Spectraljump
正是我所需要的。 - Vitaliy Kalinin

6

你需要将你的目录结构放在项目目录中。然后点击解决方案资源管理器工具箱顶部的“显示所有文件”图标。之后,新添加的目录将被显示出来。接下来,你需要选择这个目录,右键单击,并选择“包含在项目中”。


1
这基本上就是被接受的答案所建议的,以及其中一个评论所提到的。 - Kev

5
这是我的操作步骤:
  1. 右键单击解决方案 -> 添加 -> 现有网站...
  2. 选择您的网站所在的文件夹。只需选择站点的根文件夹。
然后,所有文件夹和文件以及这些文件夹中的文件都将添加到您的解决方案中。

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