如何让MSBuild将所有标记为内容的文件复制到文件夹中,并保留文件夹结构?

如何让MSBuild将所有标记为内容的文件复制到文件夹中,并保留文件夹结构?,msbuild,Msbuild,作为解决方案构建的一部分,我希望将所有“内容”文件(asp?x等)复制到另一个文件夹。由于这些在项目中标记得非常清楚,我认为应该有一种简单的方法来复制它们,而不是用xcopy编写我自己的后期构建步骤。 不幸的是,我还没有弄明白这一点——这个msbuild的东西与我的大脑不兼容。 我只想要一步像 但无法理解要使用的语法 Bat文件语法建议不能回答这个问题-只有纯msbuild解决方案适用 谢谢, 根据我使用web deploy功能打包所有内容文件,然后我可以使用web deploy与站点同步,或者

作为解决方案构建的一部分,我希望将所有“内容”文件(asp?x等)复制到另一个文件夹。由于这些在项目中标记得非常清楚,我认为应该有一种简单的方法来复制它们,而不是用xcopy编写我自己的后期构建步骤。 不幸的是,我还没有弄明白这一点——这个msbuild的东西与我的大脑不兼容。 我只想要一步像 但无法理解要使用的语法

Bat文件语法建议不能回答这个问题-只有纯msbuild解决方案适用

谢谢,
根据

我使用web deploy功能打包所有内容文件,然后我可以使用web deploy与站点同步,或者如果web deploy不是一个选项,则可以使用xcopy或者更确切地说是RoboCopy

RoboCopy任务包含在中


释放
$(MSBuildProjectDirectory)\obj\$(配置)\Package\PackageTmp
\\服务器\路径
$(MSBuildProjectDirectory)\。。。

您可以通过以下方法轻松做到这一点:

<PropertyGroup>
  <DestFolder>..\Copy\</DestFolder>
</PropertyGroup>

<Target Name="CopyContentFiles">
  <Copy SourceFiles="@(Content)"
        DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/>
</Target>

..\复制\
如果要将此作为生成后步骤执行,则只需添加postTargets=“build”,例如:

<PropertyGroup>
  <DestFolder>..\Copy\</DestFolder>
</PropertyGroup>

<Target Name="CopyContentFiles" AfterTargets="Build">
  <Copy SourceFiles="@(Content)"
        DestinationFiles="@(Content->'$(DestFolder)%(RelativeDir)%(Filename)%(Extension)')"/>
</Target>

..\复制\

Sayed的答案对我不起作用,因为它还保留了原始的父目录。我改为使用下面的修改版本,它工作得很漂亮,更优雅一点

<PropertyGroup>
  <DestFolder>..\Copy\</DestFolder>
</PropertyGroup>

<Target Name="CopyContentFiles">
  <Copy SourceFiles="@(Content)"
        DestinationFiles="$(DestFolder)\%(RecursiveDir)"/>
</Target>

..\复制\

如果不编辑原始的
csproj
文件,我们怎么做呢@ShaunLuttin see不确定MSBuild在回答此问题后的几年中是否没有那么详细,但是DestinationFiles=“$(DestFolder)\%(RelativeDir)%(Filename)%(Extension)”对我有效(即跳过内容->位)@piers7,在这种情况下应该有效,因为任务刚刚通过@(内容)如果它被传递到其他项,它可能无法正常工作(不包含内容)->bitI不认为RecursiveDir适用于项目中的内容文件,仅适用于从文件系统全局绑定加载的文件集。
<PropertyGroup>
  <DestFolder>..\Copy\</DestFolder>
</PropertyGroup>

<Target Name="CopyContentFiles">
  <Copy SourceFiles="@(Content)"
        DestinationFiles="$(DestFolder)\%(RecursiveDir)"/>
</Target>