将整个目录复制到保存文件夹结构的输出文件夹?

naw*_*fal 36 directory copy xcopy visual-studio visual-studio-2012

我希望在每个构建中将特定目录复制到输出文件夹("bin").我认为它可以通过post build脚本来处理.但我不确定如何复制目录本身.我知道如何处理特定文件.

例如,这适用于文件:

项目>属性>构建事件>后期构建

COPY "$(SolutionDir)Resources\Release Notes.pdf" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)

但假设我有一个目录Template,现在我需要的一切在Templatebin在成功的build文件夹保持文件夹结构.

我试过这个:

COPY "$(SolutionDir)Resources\Template\" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)

只有Template目录中的文件以这种方式复制,而不是子目录和文件Template夹内的文件.我希望文件夹Template本身进入我的输出bin文件夹.换句话说,bin应该看起来像:

bin > Template > abc.xxx  
                 xxx.yyy
                 Subdirectory1 > asd.qwe
                                 zxc.qwe 
                 Subdirectory2 > ...
Run Code Online (Sandbox Code Playgroud)

这可能是重复的,但我找不到相关的线程.谢谢.

Cod*_*ife 51

我刚刚将它添加到我的 *.csproj 文件中(右键单击“编辑项目文件”)

<ItemGroup>
    <Content Include="MYCUSTOMFOLDER\**">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我认为为此目录需要与 *.csproj 文件处于相同的层次结构级别或低于该级别。

  • 这确实有效。答/遗憾的是,这不可能从 VS 解决方案资源管理器中实现,而是“破解”csporj 文件。B/ 当您有大量测试数据时,不仅会减慢构建速度,还会浪费大量磁盘空间 (3认同)

naw*_*fal 42

这对我有用./S是递归复制所有内容的关键.

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S
Run Code Online (Sandbox Code Playgroud)

由于我希望每次都没有提示文件被覆盖,我也添加了一个/Y开关.

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S /Y
Run Code Online (Sandbox Code Playgroud)

  • / S将忽略空文件夹.要复制所有内容,包括空文件夹,请改用/ E. (14认同)

Phi*_*lAI 20

尝试XCOPY而不是COPY; 例如

XCOPY "$(SolutionDir)Resources\Template\" "$(TargetDir)\Template" /s /i /y
Run Code Online (Sandbox Code Playgroud)

有关XCOPY的更多信息,请点击此处...

http://www.computerhope.com/xcopyhlp.htm

  • +1给我正确的方向.但我没有让你的解决方案有效.我需要在第二个参数中指定目标目标`Template`.而且我不确定是否真的需要`/ I`.我没有编辑你的,而是将它作为一个单独的答案. (2认同)

van*_*dre 11

CodingYourLife的解决方案几乎对我有用,但我发现 PreserveNewest 没有受到尊重。我在 Visual Studio 论坛上找到了一个可以正常工作的解决方案。我的 .CSPROJ 现在看起来像这样:


    <Content Include="assets\**">
        <Link>assets\%(RecursiveDir)\%(Filename)%(Extension)</Link>
        <TargetPath>assets\%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
Run Code Online (Sandbox Code Playgroud)

注意:此解决方案需要 Visual Studio 16.10 或更高版本。


小智 9

截至本文发布之日,这是在 Visual Studio 2019 上运行的另一个解决方案。这将递归复制文件夹结构及其中的所有文件。在多项目解决方案中的 C++ .vcxproj 上进行了测试。


首先,首先编辑 [ .proj / .vcxproj / .csproj ] 文件。打开后,找到您的项目范围标签。如果您已经有 ItemGroups,请将下面的代码直接粘贴到现有的 ItemGroups 之后。否则,请将其添加到 PropertyGroup 标记之前。然后修改要复制到输出路径的文件夹结构的包含和链接参数。

<ItemGroup>
    <Content Include="..\Assets\**\*.*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <DeploymentContent>true</DeploymentContent>
        <Link>Assets\%(RecursiveDir)\%(Filename)%(Extension)</Link>
    </Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

注意:如果您有多个顶级文件夹,例如 JS、IMG、BIN 等,请为每个文件夹创建一个新条目。