ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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


M
Maria Ines Parnisari

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

https://i.stack.imgur.com/ub2DI.png

https://i.stack.imgur.com/oIDP1.png


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

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


这在我在 Vista Ultimate 64 位上安装 VS 2010 时不起作用。
不,也不适用于我在 Windows 7 上安装的 VS 2010。
确认这在 VS 2010(非管理员模式)中也不起作用
我不认为你们做得对。 VS 2010 确实支持文件夹拖放。我一直这样做是为了包含我的工具包。您必须确保放入项目树中。解决方案面板和解决方案节点本身不会收到掉落物。操作系统在这里无关紧要,但对于怀疑者,我使用的是 Windows 7 64 位。
“解决方案项目”不同于将项目添加到项目中。解决方案项目是 VS 解决方案中的一个特殊文件夹。
Y
Yuchen

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

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

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

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

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

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

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

我发现这很有帮助,因为我可以为“始终在构建时复制”包含一个标签,而不是需要注释每个单独的文件(就像接受的答案中的情况一样)
当您想要在 Visual Studio 没有响应并挂起时添加大型层次结构文件夹时,这是最佳解决方案。
对于那些寻找在哪里添加它的人,它是文件 .csproj 文件。例如,Product.Feature.Web.csproj。您需要添加类似 `<ItemGroup><Content Include="Path\To\Folder**" /></ItemGroup> 之类的内容。
M
Mona Jalal

复制粘贴。

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

右键单击文件夹上的 Windows 资源管理器,然后复制包含许多文件和文件夹的文件夹。然后在 Visual Studio 解决方案资源管理器中,右键单击目标文件夹并单击粘贴。可选添加到 TFS;然后在顶部文件夹中右键单击并签入 TFS 以签入所有子文件夹和文件。


这对我有用,但拖放在 VS14 和 Windows 10 专业版中不起作用。
除非您以管理员身份运行 VS,否则拖放可能不起作用
E
Edyn

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

去做这个:

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

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

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

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

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


注意:mklink 不能在 FAT 文件系统上工作。它适用于 NTFS。
源代码控制将对符号链接造成严重破坏。 Git 需要管理员权限或只签入文件。
@CAD你能详细说明吗?我倾向于避免使用符号链接,所以我没有尝试将它们与 Git 一起使用,但我知道 Git 安装程序提到了符号链接支持。
@Sinjai 一些 GUI git 客户端会将符号链接转换为实际文件(我认为是因为它们没有以管理员权限运行)。我避免在 git 中使用符号链接,主要是因为它可能不一致。此外,您不能确定符号链接目标是否在 git repo 被克隆到的所有机器上。我相信 git repo 应该是自包含的,没有神秘的依赖关系。
S
Siavash Mortazavi

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

https://i.stack.imgur.com/P5tSD.png


问题在于如何将现有文件夹添加到解决方案中,而不仅仅是查看文件夹。
这是查看实际结构、在文件资源管理器中打开文件夹等的一个非常好的选择 - 但不幸的是,您无法从文件夹视图中添加现有的文件夹树。正如 Gant 所描述的,这只能在解决方案视图中实现。
C
CAD bloke

要扩展 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 上的更多 MSBuild 信息


P
Pang

我想我找到了一种方法来使用 Compile Include=".\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>

M
Malvineous

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

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


S
Stephen Kennedy

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 Standard Library 模板,然后编辑项目文件以定位您选择的框架版本(可以在 Visual Studio 中编辑新样式的项目格式 - 只需在解决方案资源管理器中右键单击项目并选择“编辑项目文件”)。例如:

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

进一步阅读:

旧 csproj 到新 csproj:Visual Studio 2017 升级指南

揭开 SDK 项目的神秘面纱

MSDN:.NET Core 的 csproj 格式的补充


d
davidj

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

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

假设这是结构:

/root/projA/src

/root/projA/包括

/root/projB/src

/root/projB/包括

/root/yourProj/src

/root/yourProj/包括

启动您的 VS 解决方案。右键单击解决方案正下方的项目名称。然后点击“添加”,“新建过滤器”,把名字“projA”换成projA。右键单击“projA”,单击“添加”,“新建过滤器”,输入名称“src” 右键单击“projA”,单击“添加”,“新建过滤器”,输入名称“includes”右键-单击“projA”/“src”,单击“添加”,“现有项目”,然后浏览到 /root/projA/src 以添加所有源代码或一一添加您想要的源代码。对“projA”/“includes”执行相同操作对 projB 执行相同操作。现在,您的解决方案/项目中存在您之外的外部/现有项目。 VS 会将它们编译在一起。这是一个技巧。由于 projA 和 projB 是您项目下的虚拟文件夹,因此编译器可能找不到 projA/includes。如果没有找到 projA/includes,则右键单击项目,选择“属性”。导航到“C/C++”。编辑“其他包含目录”,添加您的 projA/include,例如“../projA/includes”,相对路径。

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


F
Fenton Smith

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

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

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