2009-09-24 9 views

Antwort

39

das Problem stellte sich heraus, ist Scotts Beispiel enthält nicht die call Befehl am Anfang der Zeile. Dies ist in Ordnung, solange Sie die Datei .bat nicht mehrmals mit verschiedenen Parametern ausführen möchten. Diese

:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config" 
call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config" 

funktionierte gut für mich.

+1

In VS2008 haben mehrere CMD-Dateien in separaten Zeilen nicht funktioniert. VS hat das erste Skript nur beim Build aufgerufen. Ich habe CALL vor jeder Zeile hinzugefügt und dann hat alles funktioniert. –

+0

Warum diese "Call" -Befehle Sie fragen? Siehe [hier] (https://msdn.microsoft.com/en-us/library/ms165412.aspx). – Pascal

0

Sie sollten in der Lage sein, die Befehle in einer separaten Zeile zu platzieren, und dann wird jeder Befehl nacheinander ausgeführt. Alternativ ist auch ein „Betrüger“ Weg, um das Gleiche zu tun wie folgt:

  • eine zweite Batchdatei erstellen, die den gewünschten Teil der neuen Funktionalität läuft, dann eine übergeordnete Batch erstellen, die die Zwei-Komponenten-Batch-Dateien ausgeführt wird, und Führen Sie den neuen Stapel in Ihrem Pre-Build-Ereignis aus. Zum Beispiel: batch1.bat modifiziert Datei 1, ändert batch2.bat Datei 2, dann läuft batch3.bat sowohl batch1.bat und batch2.bat
+1

Sie sind in separaten Zeilen, aber sie scheinen als eins ausgeführt werden. Ich habe den Ansatz der Fledermaus-Datei berücksichtigt, aber es scheint eher ein Work-Around als eine Lösung zu sein. – Kirschstein

+0

Seltsam. Ich würde andere Vorschläge machen (z. B. Semikolon als Trennzeichen hinzufügen), aber ich würde nur nach Strohhalmen greifen. Es tut uns leid! – MBillock

5

Ich verwende Visual Studio 2010 unter Windows 7 64-Bit.

ich eine Lösung gefunden, die nach meinem Geschmack ist besser, ich bin Befehle zusammen mit && ^ zum Beispiel die Bearbeitung meiner .vcxproj XML-Datei wie so Verkettungs:

<PreBuildEvent> 
     <Command>echo "hello 1" &amp;&amp;^
echo "hello 2" &amp;&amp;^
echo "hello 3"</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

ich angekettet haben drei Befehle zusammen. Die '& &' teilt der Shell mit, die Ausführung zu beenden, wenn der vorherige Befehl fehlerhaft ist.

Hinweis, in der .xml-Datei kann man && nicht direkt verwenden, also '& amp; & amp; ' muss stattdessen verwendet werden. Beachten Sie auch die Verwendung des ^-Zeichens, dies ist das Zeilenfortsetzungszeichen der cmd-Shell (wie BASHs \-Zeichen).

Jeder neue Befehl muss am Anfang der Zeile beginnen. Mit diesem Ansatz kann man so viele Befehle verketten, wie man möchte, aber wenn einer fehlschlägt, wird der Rest in der Kette nicht ausgeführt.

Hier ist meine eigentliche usecase, ich bin mit einem Python-Skript einiger Umgebungsprüfungen durchgeführt werden, gefolgt von meinem vorkompilierte Header des Debug-Datei in einem anderen Teilprojektverzeichnis kopiert:

<PreBuildEvent> 
     <Command>C:\Python27\python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp;^
copy "$(SolutionDir)h1ksim_lib\vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command> 
     <Message>Performaing pre-build actions ...</Message> 
    </PreBuildEvent> 

Die > nul-Nutzung auf dem Kopierbefehl verhindert jede Ausgabe in dem Build-Fenster zeigt nach oben, so wird mein Mitspieler nicht heraus ausgeflippt, wenn sie sagt 0 file(s) copied.

Verweis auf dem Austausch vorkompilierte Header zwischen Teilprojekten ist hier:

Sharing precompiled headers between projects in Visual Studio