Kann ich den Ausgabepfad für das MSBuild-Inhalts-Tag angeben?

8

Ist es möglich, einen anderen Ordner für die Ausgabe der folgenden Datei anzugeben?

%Vor%     
abenci 18.04.2012, 06:55
quelle

4 Antworten

5

Sie können, aber nicht mit "Inhalt". Es hängt von der Item-Aufgabe ab, aber die meisten der eingebauten, in die Sie hineinhacken könnten, sind die Mühe oder die Nebenwirkungen wert.

Es gibt einen grundlegenden, gut abgenutzten Pfad, um damit umzugehen :) Dies vermeidet auch die gemeine PostBuild-Shell-Shell, wenn Sie .Net machen, und verwendet den aktuellen Build-Prozess.

Ich habe keine anderen Antworten wie diese gesehen, mit MSBuild, wo ich glaube, das Herz der OP-Frage ist. Dies ist das Kernkonzept und der kürzeste Pfad, der das Auffinden eines Elementtyps verhindert, der einen Pfadpfad 'relativ zum Ausgabepfad' ohne Nebenwirkungen hat.

1) Post Process Style:

%Vor%

Dann unten (mit welchen Pfaden auch immer):

%Vor%

Dann enthält Ihr existierendes MS-Build (fügen Sie das nicht hinzu, ist hier als Markierung):

%Vor%

Dann das 'nach dem Build':

%Vor%

Das Hauptproblem ist, dass Projektelemente standardmäßig nichts tun, sondern einen Typ wie 'Inhalt' oder 'MyTarget'. Es sind diese Typen, die sagen, was passieren wird. Sie können möglicherweise eine Aufgabe finden oder eingeben oder ein Skript-Include erstellen, das über die gewünschten Eigenschaften verfügt. In Bezug auf ein Element in einer Elementgruppe ist jedoch nichts intrinsisch, was mit dieser Datei beim Erstellen passiert. Das Obige ist ein Gleichgewicht zwischen der Kraft einer speziell gebauten "Aufgabe", aber ohne jegliche Schwierigkeiten.

Sobald Sie

hinzufügen %Vor%

einmal in der Projektdatei, dann wird es in der BuildAction-Liste für jede Datei angezeigt, in der Sie jede Datei einstellen können, ohne die proj-Datei manuell bearbeiten zu müssen.

2) In einem Schritt

In späteren Versionen von MSBuild können Sie eine "ItemGroup" in das "AfterBuild" -Target einbetten und die oben genannten Aufgaben ausführen oder andere interessante Dinge tun, ohne den Rest der Datei zu berühren. Dies ermöglicht es beispielsweise, das Ergebnis des Builds mit einem einfachen Include zu erfassen und es an einen anderen Ort zu verschieben. Dies ist alles, ohne RoboCopy irgendetwas zu tun oder auf die kompliziertere Build-Zielfunktionsverarbeitung zurückzugreifen.

%Vor%

Bearbeiten (aufgrund von Abstimmungen ?, Poster kommentieren seither entfernt):

Um die möglichen Methoden zu disambiguieren und zu wiederholen, verwendet diese Methode keine MSBuild- "Funktionen" oder alternative Aufgaben wie "RoboCopy", sondern einen reineren MSBuild-Stil mit Kernfunktionen, wie man sie bei Items wie "Inhalt" selbst.

Die Frage war, kann ich einen "anderen Ordner für die folgende Datei" angeben und kann dies für das Inhalts-Tag tun. Sie können alle BuildAction mit MSBuild-Funktionen umleiten, aber ich glaube nicht, dass das die Frage war.

Sie können dies wie oben gezeigt in einem Schritt tun, also glaube ich nicht, dass dies komplizierter ist und es leichter zu lesen ist. Unten ist die Kurzform und lässt ihn seine eigene BuildAction erstellen, die er beliebig bearbeiten kann. Also nein, Sie können "Content" nicht sagen, dass er einen anderen Ordner für eine bestimmte Datei auswählen soll, die als "Inhalt" markiert ist, aber Sie können eine andere Build-Aktion erstellen, die ziemlich einfach funktioniert. Sie könnten auch Meta-Informationen in das StlFiles-Tag einfügen, die die Aktion so leiten, dass Sie sie auf das Tag selbst setzen oder den StlFiles-Hook früher im Prozess als der Inhalt haben, aber das ist komplizierter.

%Vor%     
Celess 01.09.2012 22:52
quelle
1

Sie können einen anderen Ausgabeordner angeben, indem Sie die Metadaten Link für None / Content verwenden:

%Vor%

Wenn Platzhalter in einer include-Anweisung verwendet werden, ist dies auch die Möglichkeit, die Verzeichnishierarchie beizubehalten, auch für Dateien, die von außerhalb des Projektverzeichnisses kommen:

%Vor%

In SDK-basierten Projekten (Standard für ASP.NET Core / .NET Core / .NET Standard-Projekte), die ein SDK 2.0.0+ verwenden, kann dasselbe mit den Metadaten LinkBase erreicht werden:

%Vor%     
Martin Ullrich 10.12.2017 10:50
quelle
0

Es gibt keine Möglichkeit, einen Ausgabeordner zusätzlich AFAIK anzugeben, aber Sie können die Datei vor oder nach dem Build kopieren.

    
Bojan Bjelic 01.09.2012 23:07
quelle
0

Diese Funktionalität ist nicht in das Content-Objekt integriert. Aber Sie können es anheften, indem Sie Ihrer Projektdatei ein Ziel hinzufügen.

In Ihrem Projekt haben Sie derzeit Folgendes:

%Vor%

Angenommen, Sie möchten, dass eine bestimmte Datei an einen anderen Speicherort kopiert wird, fügen Sie diese Datei am Ende (vor dem abschließenden Tag "Project") hinzu:

%Vor%

Wenn Sie ein paar weitere Dateien hinzufügen möchten, um sie in den gleichen Ordner zu kopieren, versuchen Sie es stattdessen:

%Vor%     
BitwiseMan 05.09.2012 05:22
quelle