2008-12-25 100 views
547

这个问题很简单。我不是在Visual Studio中创建文件夹,而是在文件系统上为我的项目创建一个目录结构。如何在项目中包含所有文件夹和文件,保持结构?如何将现有的目录树添加到Visual Studio中的项目中?

如果我在名为Services的文件夹中添加现有文件并导航到目录结构中的文件.. Services> AccountManagement> CreateAccount.cs,它将出现在Visual Studio中,如下所示:Services> CreateAccount.cs。我不想要这个。

我已经完成了一个完整的目录结构,因为我模仿我们的客户端开发人员使用相同的结构进行组织。如何将所有文件夹和文件添加到Visual Studio中的项目中?或者我必须做大多数微软用户所做的工作,并“忍耐”并通过Visual Studio重新创建每个文件夹?

+3

[How to“Add Existing Item”Visual Studio中的整个目录结构?](http://stackoverflow.com/questions/57776/how-to-add-existing-item-an -entire-directory-structure-in-visual-studio) – nawfal 2013-08-07 08:51:36

回答

944

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

enter image description here

enter image description here

+95

有没有办法做到这一点与目录(树)_outside_项目目录? – imre 2011-05-01 18:36:17

+1

有没有办法做到这一点的文件夹不是你的项目的子目录?即:有E:\ ProjectX \ project.vcproj包含文件夹E:\ Common \ *。cs? – 2012-02-28 01:00:05

+3

几乎可以工作。我可以看到目录树,并添加多个文件,但它不会让我添加包括子树在内的整个目录。 – ManicBlowfish 2012-05-09 16:44:49

54

你也可以将它从Windows Explorer的文件夹拖放到你的Visual Studio解决方案的窗口。

0

据我所知,在VS2010中这样做的唯一方法就像拖放方法。右键单击要添加项目的解决方案。应用程序菜单将有一个添加...项目。打开它,您会发现其中一个选项是将现有项目添加到解决方案。

在打开的对话框中,导航到包含解决方案项目文件的文件夹并选择它。作为导入该项目文件的一部分,VS将会导入整个目录,并假定该项目的任何下级目录。

由于这确实需要一个现有的项目文件,所以直到该树已转换为项目后才能导入目录树。

25

复制&粘贴

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

  1. 右键单击Windows资源管理的文件夹,并与许多文件和文件夹的文件夹复制。

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

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

13

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

要做到这一点:

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

这有它的缺点和缺陷,但我偶尔会用到需要不同名称的重复库。

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

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

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

1

在Visual Studio 2013中,右键单击文件夹时无法使“包含在项目中”工作。做了什么工作就是展开文件夹,选择所有文件,然后选择“包含在项目中”。这是非常乏味的,因为你必须一个接一个地做每个文件夹(但至少你可以一次完成每个文件夹中的所有文件),并且它似乎存储文件路径(你可以通过查看文件的属性并在看“相对路径”选项)。

我希望能用它来在Visual Studio Installer项目中部署一些数据文件,并且它似乎会选取包含的文件并保留它们的路径。

19

在Visual Studio 2015中,这就是你如何做到的。

如果你想自动包含以下特定文件夹中所有子文件:

<Content Include="Path\To\Folder\**" /> 

这可以限制包括指定的路径内唯一的文件:

<Content Include="Path\To\Folder\*.*" /> 

甚至只有文件与一个指定的扩展名:

<Content Include="Path\To\Folder\*.jpg" > 

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

2

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

这里是什么,你可以添加到*.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> 

$(Codez)是我定义的Windows环境变量的一个例子,你可以使用内置的环境变量相同的方式。

最后一个示例组是我在最终输出中需要的一堆内容文件。请参阅https://stackoverflow.com/a/11808911/492和其他答案&有关更多的链接。在https://msdn.microsoft.com/en-us/library/bb629388.aspx

0

更多的MSBuild信息,我想我找到了一种方法与编译做到这一点包括=“\码***。CS” 我想什么是递归包括在我的代码文件夹的代码。

这是项目文件示例。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0" DefaultTargets="BuildTarget"> 
    <PropertyGroup> 
     <OutputType>Library</OutputType> 
    </PropertyGroup> 
    <PropertyGroup> 
     <StartupObject /> 
    </PropertyGroup> 
    <PropertyGroup> 
     <RootNamespace>Autogen</RootNamespace> 
    </PropertyGroup> 
    <ItemGroup> 
     <Compile Remove="@(Compile)" /> 
     <Compile Include=".\Code\**\*.cs" /> 
    </ItemGroup> 
    <Target Name="BuildTarget"> 
     <Message Text="Build selected" Importance="high"/> 
    </Target> 
</Project> 
相关问题