Auswertung von ItemGroups in msbuild

Standard

Neulich hatte ich das Problem, dass ItemGroups in msbuild offenbar
einmal zu Beginn ausgewertet werden und danach die Liste der Items bis
zum Ende des Builds nicht mehr aktualisiert wird. Wenn während des
Builds Verzeichnisse oder Dateien gelöscht bzw. erzeugt werden, stimmt
der Inhalt der ItemGroup nicht mehr mit dem tatsächlichen
Dateisysteminhalt überein.

Normalerweise ist das kein Problem, weil erstens der Source-Code zu
Beginn feststeht und diese Dateien während des Build-Prozesses nicht
gelöscht werden und zweitens Build-Artefakte, die in den nächsten
Buildsteps weiterverarbeitet werden, als Output-Parameter der Tasks zur
Verfügung stehens.

Ein Problem hat man allerdings, wenn man Tasks verwendet, die die
erzeugten Dateien nicht als Output-Parameter zur Verfügung stellen
(können) und diese Dateien weiterverarbeitet werden sollen.

Im folgenden Code-Snippet werden rekursiv alle Namen von
C#-Quellcodedateien ausgegeben, ein Verzeichnis gelöscht und danach
wieder alle C#-Dateinamen ausgegeben:

<project DefaultTargets="TestItems" xmlns="...">
  <itemGroup>
    <myItems Include="**.cs" />
  </itemGroup>
  <target Name="TestItems">
    <message Text="@(MyItems)" />
    <removeDir Directories="TestDir" />
    <message Text="@(MyItems)" />
  </target>
</project>

Auch nach dem Löschen des Verzeichnisses sind alle Dateien dieses
Verzeichnisses in der ItemGroup “MyItems” enthalten.

Um die ItemGroups aktuell zu halten, kann man den CreateItem-Task
verwenden:

<project DefaultTargets="TestItems" xmlns="...">
  <itemGroup>
    <myItems Include="**.cs" />
  </itemGroup>
  <target Name="TestItems">
    <message Text="@(MyItems)" />
    <removeDir Directories="TestDir" />
    <createItem Include="**.cs">
      <output TaskParameter="Include" ItemName="CurrentItems" />
    </createItem>
    <message Text="@(MyItems)" />
  </target>
</project>

In einigen Situationen ergeben sich daraus ziemlich unleserliche
Build-Skripts. Doch sollte man sich dann überlegen, ob msbuild das
richtige Tool ist.

224 thoughts on “Auswertung von ItemGroups in msbuild

  1. wh0cd133542 [url=http://sildenafilonline.doctor/]buy sildenafil online[/url] [url=http://genericsynthroid.doctor/]home page[/url] [url=http://buytorsemide.doctor/]buy torsemide[/url]

  2. wh0cd287573 [url=http://cheapantabuse.doctor/]cheap antabuse[/url] [url=http://orderkamagra.doctor/]kamagra jelly usa[/url] [url=http://buyzyban.doctor/]zyban over the counter[/url] [url=http://buyvpxl.doctor/]vpxl[/url]

  3. I would like to express my respect for your kindness for folks who absolutely need help with that area. Your personal commitment to passing the solution around has been exceedingly important and has surely made guys and women much like me to reach their endeavors. Your own warm and friendly guide signifies so much a person like me and substantially more to my office colleagues. Thank you; from everyone of us.

  4. Greate post. Keep writing such kind of information on your site.

    Im really impressed by it.
    Hi there, You have done an excellent job. I’ll
    definitely digg it and individually suggest to my friends.
    I am sure they’ll be benefited from this website.

  5. Wow, marvelous blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your
    site is wonderful, as well as the content!

Leave a Reply

Your email address will not be published.