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

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

如果我在名为Services的文件夹上“添加现有文件”并导航到目录结构中的文件. Services>AccountManagement>CreateAccount.cs,它会像这样出现在Visual Studio中:Services>CreateAccount.cs.我不想这样。

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

465864 次浏览

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

在此处输入图片描述

在此处输入图片描述

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

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

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

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

复制和粘贴

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

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

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

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

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

要做到这一点:

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

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

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

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

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

在Visual Studio 2013中,当右键单击一个文件夹时,我无法让“包含在项目中”工作。真正起作用的是展开文件夹,选择所有文件,然后选择“包含在项目中”。这很乏味,因为你必须一个接一个地处理每个文件夹(但至少你可以一次完成每个文件夹中的所有文件),它似乎存储了文件路径(你可以通过查看文件上的属性并查看“相对路径”选项来查看这一点。)

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

在Visual Studio 2015中,您可以这样做。

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

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

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

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

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

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

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

以下是一个示例,说明您可以添加到*.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/en-us/library/bb629388.aspx

我想我找到了一种方法来使用编译包含=".\Code***. 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>

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

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

我找不到令我满意的答案,所以我自己想通了。

如果你想为你的项目添加外部源代码,并且不想复制整个代码,这就是你的答案。我对其他git有很多依赖关系,它们每小时更新一次,如果不是每分钟更新一次。我不能每小时复制一次来同步。这是你需要做的。

假设这是一个结构:

/root/projA/src

/root/projA/includes

/root/projB/src

/root/projB/includes

/root/yourProj/src

/root/yourProj/includes

  1. 启动您的VS解决方案。
  2. 右键单击解决方案下方的项目名称。
  3. 然后单击“添加”、“新建过滤器”,为项目A添加名称“项目A”。
  4. 右键点击“项目”,点击“添加”,“新建过滤器”,输入名称“src”
  5. 右键单击“项目”,单击“添加”,“新建过滤器”,输入名称“包括”
  6. 右键单击“项目”/“src”,单击“添加”,“现有项目”,然后浏览到 /root/projA/src以添加所有源代码或逐个添加所需的源代码。
  7. 对“项目”/“包含”执行相同操作
  8. 对项目B执行相同的操作。现在,您的解决方案/项目中存在您的外部/现有项目。VS将把它们编译在一起。这里有一个技巧。由于项目A和项目B是项目下的虚拟文件夹,编译器可能找不到项目A/包括。

  9. 如果找不到项目/包含,则右键单击项目,选择“属性”。

  10. 导航到“C/C++”。编辑“附加包含目录”,添加您的项目/包含,如“…/项目/包含”,相对路径。

一个警告,如果有重复的包含/头文件,“头文件”上的“从项目中排除”实际上不起作用。

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

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

  • 类库项目

  • 控制台应用程序

  • ASP.NET核心web应用

  • . NET Core任何类型的项目

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

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

进一步阅读: