2009-09-24 13 views

risposta

39

scopre il problema è l'esempio di Scott non include il comando call all'inizio della linea. Questo va bene finché non si desidera eseguire il file .bat più volte con parametri diversi.

questo:

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

funzionato bene per me.

+1

In VS2008 non è stato possibile inserire più file CMD su righe separate. VS ha chiamato solo il primo script su build. Ho aggiunto CALL davanti a ogni riga e poi tutto ha funzionato. –

+0

Perché questi comandi 'call' chiedi? Vedere [qui] (https://msdn.microsoft.com/en-us/library/ms165412.aspx). – Pascal

0

Dovresti essere in grado di mettere i comandi su una linea separata, e quindi ogni comando verrà eseguito in sequenza. In alternativa, un modo "imbroglione" per fare la stessa cosa è la seguente:

  • Creare un secondo file batch che esegue la parte desiderata di nuove funzionalità, quindi creare un lotto genitore che gestisce i due file batch dei componenti, e esegui quel nuovo batch nel tuo evento pre-build. Per esempio: batch1.bat modifica il file 1, batch2.bat modifica di file 2, quindi batch3.bat funziona sia batch1.bat e batch2.bat
+1

Sono su righe separate, ma sembrano essere eseguiti come uno. Ho preso in considerazione l'approccio al file bat, ma sembra una soluzione piuttosto che una soluzione. – Kirschstein

+0

Strano. Offrirei altri suggerimenti (come aggiungere punto e virgola come separatori), ma mi piacerebbe solo afferrare le cannucce. Scusate! – MBillock

5

Utilizzo Visual Studio 2010 su Windows 7 a 64 bit.

ho trovato una soluzione che è meglio per i miei gusti, io sono il concatenamento comandi insieme a && ^, ad esempio, la modifica di mio file xml .vcxproj in questo modo:

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

ho incatenato tre comandi insieme. Il numero "& &" indica alla shell di interrompere l'esecuzione se il comando precedente viene eliminato.

Nota, nel file .xml, non è possibile utilizzare && direttamente, quindi '& amp; & amp; ' È necessario utilizzare. Notare anche l'uso del carattere ^, questo è il carattere di continuazione della linea della shell cmd (come il carattere \ di BASH).

Ogni nuovo comando deve iniziare all'inizio della riga. Usando questo approccio, si può incatenare quanti comandi vuoi, ma se uno fallisce, il resto della catena non verrà eseguito.

Ecco il mio caso d'uso attuale, sto eseguendo alcuni controlli ambientali con uno script Python, seguita copiando file di debug del mio header precompilato nella directory di un altro sotto-progetto:

<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> 

La > nul utilizzo sul comando di copia impedisce qualsiasi uscita mostrando nella finestra di generazione, così i miei compagni di squadra non avranno fuori di testa quando dice 0 file(s) copied.

riferimento alla condivisione intestazioni pre-compilati tra i sotto-progetti è qui:

Sharing precompiled headers between projects in Visual Studio

Problemi correlati