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

我想要一个特定的目录复制到输出文件夹(“ bin”)上的每一个生成。我认为它可以通过后构建脚本处理。但我不确定如何复制目录本身。我知道怎么处理特定的文件。

例如,这适用于一个文件:

进去

Project > 属性 > Build Events > Post Build

COPY "$(SolutionDir)Resources\Release Notes.pdf" "$(TargetDir)"

但是假设我有一个目录 Template,现在我需要 Template下的所有内容在成功构建 维护文件夹结构时进入 bin文件夹。

我试过了:

COPY "$(SolutionDir)Resources\Template\" "$(TargetDir)"

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

bin > Template > abc.xxx
xxx.yyy
Subdirectory1 > asd.qwe
zxc.qwe
Subdirectory2 > ...

这可能是复制品,但我找不到相关的帖子,谢谢。

55753 次浏览

尝试使用 XCOPY 代替 COPY; 例如。

XCOPY "$(SolutionDir)Resources\Template\" "$(TargetDir)\Template" /s /i /y

更多关于 XCOPY 的信息请点击这里..。

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

这对我很有效。 /S是递归复制所有内容的关键。

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S

因为我希望每次在没有提示符的情况下覆盖文件,所以我还添加了一个 /Y开关。

XCOPY "$(SolutionDir)Resources\Template" "$(TargetDir)\Template\" /S /Y

我只是将它添加到我的 * . csproj 文件中(右键单击 Edit Project File)

<ItemGroup>
<Content Include="MYCUSTOMFOLDER\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>

我认为为此目录需要在相同的层次结构级别的 * . csproj 文件或以下。

对于这个问题,我有一个可行的解决办法:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<ItemGroup>
<CommonFont Include="..\common\src\Web\wwwroot\css\fonts\*.*" />
</ItemGroup>
<Copy SourceFiles="@(CommonFont)"  DestinationFolder="wwwroot\css\fonts" SkipUnchangedFiles="true" />
</Target>

以下是截至本文发表之日在 VisualStudio2019上运行的另一个解决方案。这将递归地复制文件夹结构和其中的所有文件。在 C + + 上测试。多项目解决方案中的 vcxproj。


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

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

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

编写你的生活的解决方案几乎对我奏效,但我发现 Preserve veNewest 没有得到尊重。我在 VisualStudio 论坛上发现了一个可以正常工作的 解决方案。我的。CSPROJ 现在看起来是这样的:


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

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

这是唯一适合我的解决方案(VS2022,. Net Framework) :

  <ItemGroup>
<ContentWithTargetPath Include="..\..\..\Libraries\Core\Business\Vodovoz.Reports\Reports\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>Reports\%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>