2013-06-04 4 views
1

솔루션을 빌드하고 모든 데이터를 폴더에 보관하는 MSBuild를 사용하여 빌드 파일을 만들었습니다. 이제 모든 데이터를 공유 폴더를 통해 액세스하는 원격 컴퓨터에 복사하려고합니다.로컬 컴퓨터에 보관 된 파일을 MSBuild를 사용하여 원격 컴퓨터의 공유 위치에 복사

"DestinationFiles는"48 항목 (들)을 의미하며, "있는 SourceFiles는"1 개 항목 (들)을 의미한다 :

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

하여 빌드 스크립트를 실행 한 후에, 나는 오류 다음 얻는다. 그들은 동일한 수의 항목이 있어야합니다 "

을 난 그냥 당신은 파일을 반복 할 필요가

답변

2

도와주세요은 MSBuild를 사용하여 원격 컴퓨터의 공유 위치에 로컬 컴퓨터에 보관 파일을 복사하려면 :..

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