2013-06-04 5 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 товар (ов), а также "исходников," относится к 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>