使用MSBuild将保存在本地计算机上的文件复制到远程计算机上的共享位置

时间:2013-06-04 07:06:59

标签: msbuild msbuild-task msbuild-4.0 msbuildextensionpack

我使用MSBuild创建了一个构建文件,它构建解决方案并将所有数据保存到文件夹中。现在我想将所有数据复制到通过共享文件夹访问的远程计算机。

 <PropertyGroup>
    <PublishDir>\\remoteMachineName\QA</PublishDir>
    <ServiceLocationQA>remoteMachineName\QA</ServiceLocationQA>
    <MachineName>remoteMachineName</MachineName>
  </PropertyGroup>

<ItemGroup>
       <Source Include=".\buildartifacts\**\*.*"/>
    <ServiceFilesToDeploy Include=".\buildartifacts\**\*.*" />
 </ItemGroup>

<Copy SourceFiles=".\buildartifacts\**\*.*"
       DestinationFiles="@(ServiceFilesToDeploy->'$(PublishDir)\%(RecursiveDir)%(Filename)%(Extension)')"
          ContinueOnError="false" />

执行构建脚本后,我收到以下错误:

“DestinationFiles”指的是48个项目,“SourceFiles”指的是1个项目。它们必须具有相同数量的项目。“

我只想使用MSBuild将本地计算机上保存的文件复制到远程计算机上的共享位置。请帮忙

2 个答案:

答案 0 :(得分:2)

您需要迭代文件:

    <Copy SourceFiles="%(ServiceFilesToDeploy.Identity)"
       DestinationFiles="@(ServiceFilesToDeploy->'$(PublishDir)\%(RecursiveDir)%(Filename)%(Extension)')"
          ContinueOnError="false" />

这样就可以为ServiceFilesToDeploy中的每个文件调用复制任务。

答案 1 :(得分:0)

您甚至不需要进行批处理,因为复制任务了解itemgroups:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Test">
    <PropertyGroup>
      <PublishDir>\\remotemachine\test</PublishDir>
      <BuildArtifacts>.\buildartifacts</BuildArtifacts>
    </PropertyGroup>

    <ItemGroup>
      <Source Include="$(BuildArtifacts)\**\*.*"/>
    </ItemGroup>

    <Copy SourceFiles="@(Source)"
           DestinationFolder="$(PublishDir)\%(RecursiveDir)"/>
  </Target>
</Project>