2013-03-05 6 views
5

Ich habe eine Lösung in Visual Studio, in der ich ein gemeinsam genutztes Eigenschaftsblatt habe, das einen Post-Build Event-Befehl (bar) enthält, der für jedes Projekt ausgeführt werden muss.Post-Build-Ereignis in Visual Studio erben?

Foo.props> Allgemeine Eigenschaften> Veranstaltungen Erstellen> Post-Build-Ereignis> Command Line = bar

Wie gebe ich dann weitere projektspezifische Events Post-Build? Die übliche "Übernehmen von Eltern- oder Projektstandards" fehlt, und ich würde es lieber nicht nötig haben, jedes Projekt einzeln zu bar hinzuzufügen, da es schwer zu pflegen ist.

Antwort

2

Basierend auf dieser post, scheint es nicht möglich. Du hast deine Frage vor einer Weile gepostet; Hast du eine brauchbare Alternative gefunden?


nach Feedback Editiert: Eine potentiell chaotisch Alternative Ihres Befehl als Makro wäre zu definieren:

<!-- CommandX.props --> 
<PropertyGroup> 
    <CommandX>bar</CommandX> 
</PropertyGroup> 

Dann Sie $(CommandX) auf den Post-Build-Befehl des Projektes oder in einer anderen hinzufügen könnten Eigenschaftsblatt. Wenn $(CommandX) nicht existiert, wird es ruhig ignoriert.

Wenn Sie das Makro auf eine andere Eigenschaft Blatt hinzufügen, dann würden Sie zu Import Ihre CommandX Eigenschaftsblatt haben, so dass $(CommandX) Wert erbt:

<!-- Some-Other-Property-Sheet.props --> 
<ImportGroup Label="PropertySheets"> 
    <Import Project="CommandX.props" /> 
</ImportGroup> 

Nach etwas mehr über die Build-Lernen Prozess, ich würde empfehlen, MSBuild tasks zu verwenden; insbesondere könnte die Exec task die machbarste Lösung bieten.

+0

Nein, ich zurückgegriffen haben separat jedes Projekt manuell gewährleistet wird, wie pro meine Frage. Die einzige Lösung, an die ich gedacht habe (aber nicht zu implementieren versucht habe), ist die Erstellung einer eigenen Vererbungsstruktur durch Skripte - jedes Projekt ruft das gleiche Skript wie sein Post-Build-Ereignis auf, übergibt den Projektnamen jedoch als Variable und hat das Skript Führen Sie die zusätzlichen Befehle entsprechend aus. Clunky, aber zumindest reduziert es die Wartung auf nur eine einzige Datei. – JBentley

+0

Alternativ dazu muss jedes Projekt sein eigenes Skript aufrufen (mithilfe von MSVCs eingebauten Makros, um das Skript von einem projektabhängigen Speicherort aus aufzurufen) und die Skripts die Skripts rekursiv von den Projekten aufrufen, von denen sie erben. Das Hauptproblem bei diesen beiden Ansätzen besteht darin, dass die Vererbungsstruktur selbst an zwei Stellen aktualisiert werden muss (Eigenschaftsfenster und Skripts), andernfalls sind sie nicht mehr synchron. – JBentley

13

Nach dem Finden dieser Lösung und Blick auf den anderen Beitrag. Ich fand es unmöglich zu verstehen, warum das VC++ Team diese Funktion verlassen würde.

Nachdem Sie die Makros für die Eigenschaftenseiten durchgelesen haben, können Sie den Befehl aus den vorherigen Eigenschaften mithilfe der% (Command) -Makros/Umgebungsvariablen einfügen. Dies funktioniert für alle Build-Ereignisse.

PropertySheet1.props

copy some.dll $(OutputPath) 
%(Command) 

PropertySheet2.props

copy other.dll $(OutputPath) 
%(Command) 

Ergebnisse in allen Befehlen ausgeführt wird.

+0

Das funktioniert perfekt. Danke dafür! – Bklyn

0

Da einige Post-Build-Ereignisse nicht von dem Eigenschaftenblatt erben, in dem sie definiert sind, habe ich die Ente befragt und bin hier gelandet.

Ich habe gute Nachrichten: Visual Studio 2013 Da die Pre-Build-und Post-Build-Ereignis Befehlszeilen haben ein „Vererben von den Eltern oder Projektvorgaben“ -Option, die alle Ereignisse aus dem Eigenschaftsfenster erstellt.

(Getestet mit Visual Studio 2013 und 2017 Professional)

Verwandte Themen