koncepcji, że powinieneś być zainteresowany jest znany jako Batching.
ja omówiliśmy dokładnie ten scenariusz na moim blogu na http://www.sedodream.com/PermaLink,guid,5f1e0445-ce3d-4052-ba80-42fd19512d42.aspx
Oto tekst tego wpisu na blogu, możesz pobrać wymienione pliki pod powyższym linkiem.
Dzisiaj ktoś opowiadał mi o współpracowniku, który miał problemy z MSBuild. Powiedział mi, że próbował skopiować zestaw plików do zestawu różnych serwerów. Problem polegał jednak na tym, że nie wiedział, jak to osiągnąć, bez wykonywania wielu wywołań zadania Kopiuj. Powiedziałem mu, że może to osiągnąć za pomocą MSBuild Batching. Partie to proces wykonywania zadania (lub celu) na zestawie elementów (partii) na raz. Partia może również zawierać pojedynczy element. Tak więc w tym scenariuszu musimy wykonać kopię raz dla każdego serwera, który chciał wdrożyć. Stworzyłem prosty plik msbuild, który demonstruje to na dwa różne sposoby. Pierwszy sposób wykorzystuje grupowanie zadań, które można zobaczyć w celu testowym. Drugi używa partii docelowej, którą można zobaczyć w celu DoItCore. Stworzyłem także czysty cel, który nie ma nic wspólnego z dozowaniem.
<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>
Wiązanie jest zaawansowanym tematem MSBuild i jest zdecydowanie zaniedbane. Muszę przyznać, że jestem winny, że nie piszę o tym wystarczająco. Istnieje kilka dobrych zasobów porcjowania, są one wymienione poniżej.
Oto kilka innych blogów, które zamieściłem.
Dzięki, Sayed Ibrahim Hashimi
My Book: Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
Świetnie. Dzięki, komentarze sprawiają, że jest to bardzo jasne. Wiem, że mogę zabrzmieć trochę płytko, jeśli mówię, że nie chcę zostać guru MSBuild, raczej tylko rozwiązam mój problem tutaj. Zauważyłem, że dzięki zastosowaniu przypadku technologii przez przypadek jest to punkt w krzywej uczenia się, gdzie masz dość rozproszonej wiedzy, że całonocne badanie od zera jest znacznie łatwiejsze i umieszcza wszystko na swoim miejscu. Uważam, że często jest to lepszy sposób na naukę. –
Jeśli nie musisz znać tego wszystkiego teraz, to działa dobrze. Naprawiłem błąd w przykładzie (przepraszam za to). Musisz wywołać dowolne zadania (np. Kopię) w celu. Wrzuciłem go do celu. Wywołujesz wywołanie MSBuild z tą nazwą docelową (CopyFiles), a on uruchomi cel. – Vaccano