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

时间:2008-12-25 03:17:14

标签: visual-studio

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

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

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

12 个答案:

答案 0 :(得分:1250)

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

enter image description here

enter image description here

答案 1 :(得分:66)

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

答案 2 :(得分:41)

在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

答案 3 :(得分:31)

复制&amp;粘贴即可。

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

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

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

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

答案 4 :(得分:17)

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

要做到这一点:

  1. 以管理员身份打开cmd提示
  2. mklink / d [当前项目目录名] [应该指向的其他项目中的目录]
  3. 这有它的缺点和陷阱,但我偶尔会使用它来处理需要不同名称的重复库。

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

    1. 使用上述步骤在项目文件夹中创建链接。
    2. 在Visual Studio中...在解决方案资源管理器中选择项目。
    3. 在解决方案资源管理器的顶部...单击“显示所有文件”按钮(如果已经激活,则可能需要单击两次)。
    4. 此链接现在将显示在您的项目中...右键单击并选择“包含在项目中”。
    5. 这些是我遵循的步骤,适用于几个不同的项目。

答案 5 :(得分:9)

要展开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和其他答案&amp;在那里链接了更多。

https://msdn.microsoft.com/en-us/library/bb629388.aspx

的更多MSBuild信息

答案 6 :(得分:8)

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

Solution View and Folder View

答案 7 :(得分:3)

我认为我找到了一种方法,使用Compile Include =“。\ Code ***。cs” 我想要的是在我的Code文件夹下递归包含代码。

这是项目文件样本。

<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>

答案 8 :(得分:2)

在Visual Studio 2013中,我无法获得&#34;包含在项目中#34;右键单击文件夹时工作。什么工作是扩展文件夹,选择所有文件,然后选择&#34;包含在项目&#34;。这是非常乏味的,因为你必须逐个完成每个文件夹(但至少你可以一次完成每个文件夹中的所有文件),它似乎存储文件路径(你可以通过查看文件的属性来看到这一点)并查看&#34;相对路径&#34;选项。)

我希望使用它在Visual Studio Installer项目中部署一些数据文件,它似乎可以获取包含的文件并保留它们的路径。

答案 9 :(得分:0)

据我所知,在VS2010中执行此操作的唯一方法类似于拖放方法。右键单击要添加项目的解决方案。应用程序菜单将有一个add ...项目。打开它,您会发现其中一个选项是将现有项目添加到解决方案中。

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

由于这需要现有的项目文件,因此在将树转换为项目之前导入目录树是不可能的。

答案 10 :(得分:0)

我没有找到满意的答案,所以我弄清楚了自己。

如果您要向项目中添加外部源代码并且不想复制整个代码,那么这里就是您的答案。我对其他git有很多依赖性,它们每隔一小时更新一次。我无法每小时复制一次以进行同步。这是您需要做的。

假设这是结构:

/ root / projA / src

/ root / projA / includes

/ root / projB / src

/ root / projB / includes

/ root / yourProj / src

/ root / yourProj / includes

  1. 启动您的VS解决方案。
  2. 右键单击“解决方案”下方的项目名称。
  3. 然后单击“添加”,“新建过滤器”,为projA命名为“ projA”。
  4. 右键单击“ projA”,单击“添加”,“新建过滤器”,输入名称“ src”
  5. 右键单击“ projA”,单击“添加”,“新建过滤器”,输入名称“ includes”
  6. 右键单击“ projA” /“ src”,依次单击“添加”,“现有项”,然后浏览到/ root / projA / src以添加所有源代码或为想要的源代码一个接一个地添加。< / li>
  7. 对“ projA” /“ includes”执行相同操作
  8. 对projB执行相同操作。 现在,您外部的外部/现有项目将出现在您的解决方案/项目中。 VS将它们一起编译。 这是一个把戏。由于projA和projB是项目下的虚拟文件夹,因此编译器可能找不到projA / includes。

  9. 如果找不到projA / include,请右键单击该项目,然后选择“属性”。

  10. 导航到“ C / C ++”。编辑“其他包含目录”,将您的projA / include添加为“ ../projA/includes”,相对路径。

一个警告,如果存在重复的包含/头文件,那么“头文件”上的“从项目中排除”是不起作用的。这是VS中的错误。

答案 11 :(得分:0)

Visual Studio 2017和更高版本支持一种新的轻量级.csproj格式,该格式已被称为“ SDK格式”。这种格式的几个优点之一是,默认情况下,文件不包含包含的文件和文件夹列表,而是包含通配符。 因此,使用这种新格式,您在资源管理器或命令行中添加的文件和文件夹将自动被提取!

SDK格式.csproj文件currently works with the following project types

  • 类库项目

  • 控制台应用程序

  • ASP.NET Core Web应用程序

  • 任何类型的.NET Core项目

要使用新格式,请创建一个新的.NET Core或.NET Standard项目。因为即使在Visual Studio 2019中也没有针对完整的.NET Framework模板进行过更新,所以要创建.NET类库,请选择.NET标准库模板,然后编辑项目文件以定位您选择的框架版本(可以在Visual Studio中编辑新样式的项目格式-只需在解决方案资源管理器中右键单击该项目,然后选择“编辑项目文件”即可。例如:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

进一步阅读: