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

使用MSBuild将本地计算机上保留的文件复制到远程计算机上的共享位置,msbuild,msbuild-task,msbuild-4.0,msbuildextensionpack,Msbuild,Msbuild Task,Msbuild 4.0,Msbuildextensionpack,我已经使用MSBuild创建了一个构建文件,它构建解决方案并将所有数据保存到一个文件夹中。现在,我想将所有数据复制到通过共享文件夹访问的远程计算机上 <PropertyGroup> <PublishDir>\\remoteMachineName\QA</PublishDir> <ServiceLocationQA>remoteMachineName\QA</ServiceLocationQA> <Mach

我已经使用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" />

\\remoteMachineName\QA
remoteMachineName\QA
远程机器名
在执行构建脚本后,出现以下错误:

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


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

您需要迭代这些文件:

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


这样,将为ServiceFilesToDeploy中的每个文件调用复制任务。

您甚至不需要执行批处理,因为复制任务了解项目组:

<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>

\\远程计算机\测试
建筑艺术品

感谢您的快速回复。请您解释一下这段代码在做什么。区别在于,您的代码将使用文件列表作为输入,而按我的方式执行时,将迭代列表并调用每个元素的目标。请检查这里我在MSBuild中解释了批处理。