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

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

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


当前回答

要扩展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/en-us/library/bb629388.aspx

其他回答

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

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

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

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

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

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

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

复制粘贴。

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

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

我想我找到了一种方法来做到这一点,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>

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

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

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

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