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


824

这个问题确实很简单。我没有在Visual Studio中创建文件夹,而是为文件系统上的项目创建了目录结构。如何在保持项目结构的情况下将所有文件夹和文件包括在内?

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

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



Answers:


1438

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

在此处输入图片说明

在此处输入图片说明


150
是否可以通过项目目录之外的目录(树)来执行此操作?
imre

2
有没有办法为不在您项目所在子目录的文件夹执行此操作?即:让E:\ ProjectX \ project.vcproj包含文件夹E:\ Common * .cs?
马特·康诺利

4
差不多可以了。我可以看到目录树,并添加多个文件,但是它不允许我添加包括子树的整个目录。
ManicBlowfish 2012年

5
问题是,仅当您通过Windows资源管理器在Visual项目中复制目录树时,它才起作用。如果只想引用计算机上另一个项目中包含的某些文件夹和文件,该怎么办?
hico

5
我知道在项目外执行此操作的唯一方法是使用符号链接...请参阅我的答案:stackoverflow.com/a/26537736/835561
Edyn 2014年

77

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


14
这在我在Vista Ultimate 64位上安装VS 2010时不起作用。
约翰·梅尔维尔,

13
否,在Windows 7上的VS 2010安装中也不起作用。
啊。

9
确认这在VS 2010(非管理员模式)中也不起作用
David Gardiner

9
我认为你们做的不对。VS 2010确实支持文件夹拖放。我一直在做,以包括我的工具包。您必须确保放入项目树。解决方案面板和解决方案节点本身将不会收到该放置。此处的操作系统无关紧要,但对于怀疑者,我使用Windows 7 64位。
加文·威廉姆斯

4
“解决方案项目”与将项目添加到项目不同。解决方案项目是VS解决方案中的一个特殊文件夹。
托德·史密斯

53

在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
我发现这很有帮助,因为我可以为“始终复制复制”添加一个标签,而不需要注释每个文件(如已接受的答案一样)
Gordon Bean

3
IMO在这里最有用的答案之一。
Sinjai

在哪里添加?如何在VS中进入XML视图?
马修·迪恩

1
当您想在Visual Studio没有响应并挂起时添加大型层次结构文件夹时,这是最佳解决方案。
Gowtham Alan,

1
这对Microsoft VS团队是一个耻辱
dejjub-AIS

33

复制并粘贴

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

  1. 在Windows资源管理器中的文件夹上单击鼠标右键,然后在包含许多文件和文件夹的文件夹上单击“复制”。

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

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


这对我有用,但是拖放在VS14和Windows 10专业版中不起作用。
蒙娜·贾拉勒

1
除非您以管理员
身份

18

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

去做这个:

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

这有它的缺点和陷阱,但是我有时将它用于需要不同名称的重复库。

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

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

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


没用!符号链接未被识别为文件夹
Anoop K. Prabhu 2014年

1
@Anoop:我添加了一些步骤来展示如何使用此方法。请试一试。
Edyn 2014年

1
它的工作!我试图通过右键单击文件夹而不是使用命令提示符来创建快捷方式,因此它不起作用。按照上述步骤操作可以解决此问题。谢谢
Anoop K. Prabhu 2014年

1
注意:mklink在FAT文件系统上不起作用。它用于NTFS。
阿德里安

源代码控制将严重破坏符号链接。Git需要管理员权限或仅签入文件。
CAD bloke'Jan

13

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

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


5
问题在于如何将现有文件夹添加到解决方案中,而不仅仅是查看文件夹。
CShark '18年

1
这是查看实际结构,在文件资源管理器中打开文件夹等的绝佳选择-不幸的是,您无法从文件夹视图添加现有的文件夹树。正如Gant所描述的,这仅在解决方案视图中可行。
马特

12

要扩展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>

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

最后一个示例组是我在最终输出中需要的一堆内容文件。有关更多信息,请参见https://stackoverflow.com/a/11808911/492及其那里的其他答案和链接。

有关更多MSBuild信息,访问https://msdn.microsoft.com/zh-cn/library/bb629388.aspx


2
这应该是答案!
Jurijs Kastanovs

4

我想我找到了一种方法,可以使用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>

2

在Visual Studio 2013中,右键单击文件夹时,我无法使用“包含在项目中”。起作用的是扩展文件夹,选择所有文件,然后选择“包含在项目中”。这非常繁琐,因为您必须一个接一个地处理每个文件夹(但至少可以一次完成每个文件夹中的所有文件),而且它似乎存储了文件路径(您可以通过查看文件的属性来查看此路径)并查看“相对路径”选项。)

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


0

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

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

因为这确实需要现有的项目文件,所以在将目录树转换为项目之前,不可能导入该目录树。


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以添加所有源代码或为想要的源代码一个接一个地添加。
  7. 对“ projA” /“ includes”执行相同的操作
  8. 对projB执行相同的操作。现在,您外部的外部/现有项目将出现在您的解决方案/项目中。VS将它们一起编译。这是一个把戏。由于projA和projB是项目下的虚拟文件夹,因此编译器可能找不到projA / includes。

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

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

需要注意的是,如果存在重复的包含/头文件,则“头文件”上的“从项目中排除”实际上是行不通的。这是VS中的错误。


0

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

SDK格式.csproj文件当前可用于以下项目类型

  • 类库项目

  • 控制台应用

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

进一步阅读:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.