Msbuild копируют в несколько местоположений на основе списка целевого параметра?

В Rails вы можете использовать String#squish , который является active_support расширением.

require 'active_support'

s = <<-EOS
1/2 cup  

            onion
EOS

s.squish
# => 1/2 cup onion

7
задан alexandrul 19 May 2010 в 10:28
поделиться

4 ответа

Вот фактический пример, который я собрал, который показывает то, что вы искали:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Test" ToolsVersion="3.5">

  <!--Declare an ItemGroup that points to your file you want to copy.-->
  <ItemGroup>
    <ItemToCopy Include=".\Home.aspx" />
  </ItemGroup>

  <!--Declare an ItemGroup that points to your destination Locations-->
  <ItemGroup>
    <DestLocations Include=".\abc\home.aspx" />
    <DestLocations Include=".\def\home.aspx" />
    <DestLocations Include=".\ghi\home.aspx" />
  </ItemGroup>

  <Target Name="CopyFiles">
    <!--Run the copy command to copy the item to your dest locations-->
    <!--This is where the magic happens.  The % sign before the DestLocations reference says to use
    Batching.  So Copy will be run for each unique FullPath MetaData in the DestLocations ItemGroup.-->
    <Copy SourceFiles="@(ItemToCopy)" DestinationFolder="%(DestLocations.FullPath)" />
  </Target>
</Project>
9
ответ дан 6 December 2019 в 23:13
поделиться

Концепция, которая должна вас заинтересовать, известна как Пакетная обработка .

] Я описал этот точный сценарий в своем блоге по адресу http://www.sedodream.com/PermaLink,guid,5f1e0445-ce3d-4052-ba80-42fd19512d42.aspx

Вот текст этого блога запись, вы можете скачать упомянутые файлы по ссылке выше.


Сегодня кто-то рассказывал мне о коллеге, у которого были проблемы с MSBuild. Он сказал мне, что пытался скопировать набор файлов на набор разных серверов. Но проблема заключалась в том, что он не знал, как добиться этого, не выполняя несколько вызовов задачи копирования. Я сказал ему, что он может добиться этого с помощью MSBuild Batching. Пакетная обработка - это процесс выполнения задачи (или цели) над набором элементов (пакетов) за раз. Партия также может включать в себя один товар. Итак, в этом сценарии нам нужно выполнить копию один раз для каждого сервера, на котором он хотел развернуть. Я создал простой файл msbuild, который демонстрирует это двумя разными способами. Первый способ использует пакетирование задач, которое можно увидеть в тестовой цели. А другой использует целевое пакетирование, которое можно увидеть в цели DoItCore. Я также создал чистую цель, которая не имеет ничего общего с пакетной обработкой.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Test">

      <ItemGroup>
            <SourceFiles Include="*.txt"/>
            <Dest Include="One;Two;Three;Four;Five"/>
      </ItemGroup>

      <Target Name="Test">
            <Copy SourceFiles ="@(SourceFiles)" DestinationFolder="%(Dest.FullPath)"/>
            <Message Text="Fullpath: %(Dest.FullPath)"/>
      </Target>


      <!-- These targets demonstrate target batching -->
      <Target Name="DoIt" DependsOnTargets="DoItCore"/>
      <Target Name="DoItCore" Inputs="@(SourceFiles)" Outputs="%(Dest.FullPath)">
            <Copy SourceFiles="@(SourceFiles)" DestinationFolder="%(Dest.FullPath)"/>
      </Target>


      <!-- This will clean up the files -->
      <Target Name="Clean">
            <CreateItem Include="%(Dest.FullPath)\**\*">
                  <Output ItemName="FilesToDelete" TaskParameter="Include"/>
            </CreateItem>
            <Delete Files="@(FilesToDelete)"/>
      </Target>
</Project>

Пакетная обработка - это сложная тема MSBuild, которой полностью пренебрегают. Я должен признать, что виноват в том, что сам недостаточно писал об этом. Саид Ибрагим Хашими

Моя книга: Внутри Microsoft Build Engine: Использование MSBuild и Team Foundation Build

2
ответ дан 6 December 2019 в 23:13
поделиться

Have an itemgroup where you build up this list of destinations ("abc..., etc). Then invoke the copy task with this list (@Destination).

I'm sure you'll find plenty of examples if you search for it. http://keithhill.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3dMSBuild

0
ответ дан 6 December 2019 в 23:13
поделиться

You really are best off doing this yourself as a learning exercise, rather than treating MSBUILD as a magic box. This article from Patrick Smacchia gives you most of the techniques involved.

0
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: