使用afterbuild任务将整个项目结构复制到另一个目录中

时间:2013-03-10 18:50:18

标签: visual-studio-2010 msbuild

我想使用AfterBuild目标将整个项目结构复制到一个单独的文件夹中。这是项目结构

TANKProject  
|
|__TANK.CLI
|__TANK.Core
|__TANK.Web 

我想将整个项目结构(包括bin文件夹和.sln文件夹)复制到B:\animesh\repos位置。

为此,我将以下代码段放在每个AfterBuild文件的.csproj目标中:

<ItemGroup>
    <_CustomFiles Include="..\TANK.ProjectName\*.*" />
</ItemGroup>
<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFiles="B:\repos\TANK"
    SkipUnchangedFiles="true" />

构建项目时出现以下错误:

"DestinationFiles" refers to 3 item(s), and "SourceFiles" refers to 1 item(s). They must have the same number of items.

我在这里缺少什么?


解决方案

根据AdrianMonk的回答,我改变了我的AfterBuild配置:

  <Target Name="AfterBuild">
    <ItemGroup>
      <_CustomFiles Include="..\**" />
    </ItemGroup>
    <Copy 
      SourceFiles="@(_CustomFiles)" 
      DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')" 
      SkipUnchangedFiles="true" />
  </Target>

我只将这个AfterBuild目标放在其中一个项目中,因为这样就足够了。

1 个答案:

答案 0 :(得分:2)

您需要指定DestinationFolder,而不是DestinationFiles

<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFolder="B:\repos\TANK"
    SkipUnchangedFiles="true" />

但是,这只会复制项目结构根目录中的文件。要复制整个结构,包括子目录中的文件,您需要使用:

<Copy
    SourceFiles="@(_CustomFiles)"
    DestinationFiles="@(_CustomFiles->'B:\repos\TANK\%(RecursiveDir)%(Filename)%(Extension)')"
    SkipUnchangedFiles="true" />

这将执行整个项目结构的递归副本(也包括输出目录)。有关更多信息,请参阅MSBuild Copy task reference docs