12 Stimmen

Wie ruft man ein überschriebenes MSBuild-Ziel auf?

In MSBuild können Sie eine <Target /> aus einer anderen Datei in Ihre eigene. Zum Beispiel die AfterBuild Ziel enthalten in Microsoft.Common.targets Datei, indem Sie einfach Ihr eigenes Ziel mit demselben Namen definieren:

<Target Name="AfterBuild">
    <!-- Do something different -->
</TargetName>

Sie werden eine Notiz wie diese sehen:

Übergeordnetes Ziel "AfterBuild" im Projekt " C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets " mit dem Ziel "AfterBuild" aus dem Projekt "XXXXX".

Gibt es eine Möglichkeit, das ursprüngliche AfterBuild-Ziel aufzurufen?

Ich möchte dies tun, um bestimmte komplexe Standardziele zu instrumentieren und dann das ursprüngliche Verhalten auszuführen. Viele Ziele wie Build verfügen über eine BuildDependsOn-Eigenschaft, die dafür verwendet werden kann. Viele andere tun dies nicht - und ich möchte sie außer Kraft setzen, ohne ihren Inhalt vollständig zu duplizieren.

15voto

Sayed Ibrahim Hashimi Punkte 43069

Wenn ein MSBuild-Skript verarbeitet wird, werden auch die importierten Dateien verarbeitet. Das Ergebnis ist eine einzige kanonische Darstellung des gesamten Skripts im Speicher. Wenn ein Ziel gefunden wird, das bereits existiert, wird die vorherige Definition verworfen, so dass es nicht möglich ist, das ursprüngliche Ziel aufzurufen.

0voto

Kjara Punkte 2036

Ich möchte dies tun, um bestimmte komplexe Standardziele zu instrumentieren und dann das ursprüngliche Verhalten auszuführen. Viele Ziele wie Build verfügen über eine BuildDependsOn-Eigenschaft, die dafür verwendet werden kann. Viele andere tun dies nicht - und ich möchte sie außer Kraft setzen, ohne ihren Inhalt vollständig zu duplizieren.

Wenn Sie zuerst etwas Benutzerdefiniertes auf einem Ziel ausführen und dann das ursprüngliche Ziel ausführen möchten, warum nicht einfach BeforeTargets ?

Anstatt also

<Target Name="AfterBuild">
    <!-- custom AfterBuild overriding default AfterBuild -->
</TargetName>

verwenden Sie einfach

<Target Name="JustBefore_AfterBuild" BeforeTargets="AfterBuild">
    <!-- custom AfterBuild just before default AfterBuild -->
</TargetName>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X