2013-06-04 30 views
1

我已經使用MSBuild創建了一個構建文件,它可以構建解決方案並將所有數據保存到一個文件夾中。現在我想將所有數據複製到通過共享文件夾訪問的遠程機器上。使用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項目(S),和 「SourceFiles」 是指1個項目。他們必須有相同數量的項目「

我只是想保持本地機器上的文件複製到使用的MSBuild在遠程計算機上的共享位置請幫

回答

2

您需要遍歷文件:。

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

這樣的副本任務將呼籲ServiceFilesToDeploy每個文件

+0

感謝您的快速回復。你能解釋一下這段代碼在做什麼。 – SharpCoder

+1

區別在於,您的代碼將使用文件列表作爲輸入,同時按照我的方式執行,將迭代列表並調用每個元素的目標。檢查http://stackoverflow.com/questions/16540562/msbuild-copy-entire-directory-while-using-metadata-in-path-names那裏我解釋了一下MSBuild中的批處理。 – MikeR

+0

謝謝你解釋。 – SharpCoder

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> 
相關問題