如何在Visual Studio中将现有目录树添加到项目?

Bri*_*ahy 766 visual-studio

问题很简单.我没有在Visual Studio中创建文件夹,而是在文件系统上为我的项目创建目录结构.如何在项目中包含所有文件夹和文件,保留结构?

如果我在名为Services的文件夹上"添加现有文件"并导航到目录结构中的文件..服务>帐户管理> CreateAccount.cs,它将显示在Visual Studio中,如下所示:Services> CreateAccount.cs.我不想要这个.

我已经完成了整个目录结构,因为我模仿我们的客户端开发人员使用相同的组织结构.如何在Visual Studio中将所有文件夹和文件添加到项目中?或者我必须做大多数Microsoft用户所做的事情并"忍受它"并通过Visual Studio重新创建每个文件夹?

Gan*_*ant 1343

您需要将目录结构放在项目目录中.然后单击解决方案资源管理器工具箱顶部的"显示所有文件"图标.之后,添加的目录将显示出来.然后,您需要选择此目录,右键单击,然后选择"包含在项目中".

在此输入图像描述

在此输入图像描述

  • 有没有办法用项目目录的目录(树)_outside_做到这一点? (138认同)
  • 我知道在项目之外执行此操作的唯一方法是使用符号链接...请参阅我的回答:http://stackoverflow.com/a/26537736/835561 (5认同)
  • 问题是,如果通过Windows资源管理器复制Visual项目中的目录树,它只能工作.如果您只想引用计算机上其他项目中包含的某些文件夹和文件,该怎么办? (4认同)
  • 几乎是有效的.我可以看到目录树,并添加多个文件,但它不会让我添加包括子树在内的整个目录. (3认同)
  • 有没有办法为不在您项目所在子目录的文件夹执行此操作?即:让E:\ ProjectX \ project.vcproj包含文件夹E:\ Common \ *。cs? (2认同)

Tod*_*ith 69

您还可以将文件夹从Windows资源管理器拖放到Visual Studio解决方案窗口中.

  • 这在我在Vista Ultimate 64位上安装VS 2010时不起作用. (14认同)
  • 不,在Windows 7上的VS 2010安装中也不起作用. (13认同)
  • 确认这在VS 2010(非管理员模式)中也不起作用 (9认同)
  • 我不认为你们做得对.VS 2010确实支持文件夹拖放.我一直这样做,包括我的工具包.您必须确保放入项目树.解决方案面板和解决方案节点本身不会收到丢弃.操作系统在这里无关紧要,但对于怀疑者,我使用Windows 7 64位. (9认同)
  • "解决方案项"与向项目添加项目不同.解决方案项是VS解决方案中的特殊文件夹. (4认同)
  • 老问题,但这是我找到的答案,所以:请注意,如果以管理员身份运行VS并启用标准烦人的Windows ACL内容,则可能无法将任何内容拖入IDE. (2认同)
  • 在VS 2013中工作,但请记住,这会将整个文件夹复制到项目目录中. (2认同)
  • 我会将不在项目目录中的源文件复制到项目目录中..不是我想要的:) (2认同)

Yuc*_*ong 46

在Visual Studio 2015中,您就是这样做的.

如果要自动包含特定文件夹下的所有后代文件:

<Content Include="Path\To\Folder\**" />
Run Code Online (Sandbox Code Playgroud)

这可以限制为仅包括指定路径中的文件:

<Content Include="Path\To\Folder\*.*" />
Run Code Online (Sandbox Code Playgroud)

甚至只有具有指定扩展名的文件:

<Content Include="Path\To\Folder\*.jpg" >
Run Code Online (Sandbox Code Playgroud)

参考:http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio

  • IMO是这里最有用的答案之一. (3认同)
  • 对于那些寻找添加位置的人来说,它是“.csproj”文件。例如,“Product.Feature.Web.csproj”。您需要添加类似“&lt;ItemGroup&gt;&lt;Content Include="Path\To\Folder\**" /&gt;&lt;/ItemGroup&gt; 的内容。 (3认同)
  • 我发现这很有用,因为我可以为"始终在构建时复制"包含一个标记,而不是需要对每个单独的文件进行注释(如接受的答案中的情况) (2认同)
  • 当您想要添加大型层次结构文件夹而 Visual Studio 没有响应并挂起时,这是最佳解决方案。 (2认同)
  • 我在 VS2019 中进行了尝试,并得到了“警告:VC 项目不支持项目项中的通配符,并且可能会导致 Visual Studio IDE 中出现意外行为、不稳定和性能下降。请参阅 https://aka.ms/cpp/projectwildcards 了解支持的选项。 (2认同)

Cat*_*tto 33

复制并粘贴.

要添加文件夹,所有子目录和文件,我们还可以复制和粘贴.例如,我们可以:

  1. 右键单击该文件夹上的Windows资源管理器,然后单击包含许多文件和文件夹的文件夹.

  2. 然后在Visual Studio解决方案资源管理器中,右键单击目标文件夹并单击粘贴.

  3. 可选添加到TFS; 然后在顶部文件夹中右键单击并签入TFS以签入所有子文件夹和文件.


Edy*_*dyn 17

您可以使用符号链接.这使得修改一个项目中的文件在另一个项目中修改它(因为它实际上是同一个文件).

去做这个:

  1. 以管理员身份打开cmd提示符
  2. mklink/d [当前项目目录名] [应该指向的其他项目中的目录]

这有它的缺点和缺陷,但我有时会使用它来处理需要不同名称的重复库.

编辑Anoop:添加到Visual Studio的步骤:

  1. 使用上述步骤在项目文件夹中创建链接.
  2. 在Visual Studio中...在解决方案资源管理器中选择项目
  3. 在解决方案资源管理器的顶部...单击"显示所有文件"按钮(如果已经激活,则可能需要单击两次).
  4. 该链接现在将显示在您的项目中...右键单击并选择"包含在项目中".

这些是我遵循的步骤,适用于几个不同的项目.


CAD*_*oke 10

要扩展Yuchen的答案,您可以将文件和路径作为链接包含在内.这与添加现有项目不同,因为它不会在项目的文件夹结构中创建额外的副本.如果您希望在许多不同的地方使用一个规范文件夹/文件等,但您只想维护它的一个版本/副本,这将非常有用.

以下是您可以添加到*.csproj文件以创建链接的示例

<Compile Include="$(Codez)\z.Libraries\Common\Strings\RegexExtensions.cs">
    <Link>Helpers\RegexExtensions.cs</Link>
</Compile>

<Compile Include="..\..\z.Libraries\MoreLINQ\MoreLinq\ExceptBy.cs">
    <Link>Helpers\ExceptBy.cs</Link>
</Compile>

<Content Include="C:\Codez\Libs\Folder\OtherFolder\**\*.*">
    <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Run Code Online (Sandbox Code Playgroud)

$(Codez) 是我定义的Windows环境变量,您可以以相同的方式使用内置的环境变量.

最后一个示例组是最终输出中需要的一堆内容文件.有关详细信息,请参阅/sf/answers/826623801/以及其他答案和链接.

更多MSBuild信息,访问https://msdn.microsoft.com/en-us/library/bb629388.aspx


Sia*_*avi 10

在Visual Studio 2017中,您可以来回切换" 解决方案视图"和" 文件夹视图".我认为这是一个更好的选择,因为它将使解决方案更加清洁.我用它来编辑.gitignore,.md文件等.

解决方案视图和文件夹视图

  • 问题在于如何将现有文件夹添加到解决方案中,而不仅仅是查看文件夹。 (3认同)