Evento di compilazione post di Visual Studio: copia nella posizione della directory relativa


228

Su una build di successo, desidero copiare il contenuto della directory di output in una posizione diversa nella stessa cartella "base" . Questa cartella principale è una parte relativa e può variare in base alle impostazioni del controllo del codice sorgente.

Ho elencato alcuni dei valori Macro disponibili per me ...

$ (SolutionDir) = D: \ GlobalDir \ Version \ AppName \ Solution1 \ build

$ (ProjectDir) = D: \ GlobalDir \ Version \ AppName \ Solution1 \ Version \ ProjectA \

Voglio copiare i contenuti di Output Dir nella seguente cartella:

D: \ GlobalDir \ Version \ AppName \ Solution2 \ Project \ Dependency

La posizione di base "D: \ GlobalDir \ Version \ AppName" deve essere recuperata da una delle macro sopra. Tuttavia, nessuno dei valori di macro elenca solo la posizione principale.

Come estraggo solo la posizione di base per il comando post build copy?

Risposte:



293

Ecco cosa vuoi inserire nella riga di comando dell'evento Post-build del progetto:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

EDIT: O se il tuo nome target è diverso dal nome del progetto.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"

1
Bel consiglio. Ho dimenticato le citazioni.
Matt Montag,

3
Non ha funzionato per me perché ho dimenticato il /Y. Grazie per aver mostrato l'intero comando.
Segna il

10
Si può usare xcopycon i caratteri jolly e le opzioni appropriate per ottenere un risultato simile, pur mantenendo la struttura (albero) della cartella di origine, come ad esempio:xcopy /i /e /s /y /f "<source>\MyFolder\*" "<destination>\MyFolder"
Dr1Ku

4
Suggerirei di usare $ (TargetName) invece di $ (ProjectName) nella parte sorgente.
Alexander Schmidt,

2
aggiornamento alla mia anteprima commento copy /Y "$(TargetPath)" "$(SolutionDir)somewhere\":, senza la barra rovesciata aggiuntiva, poiché $ (SolutionDir) include una barra rovesciata finale (almeno in VS2012)
ghiacciato il


10

Penso che questo sia correlato, ma ho avuto un problema durante la creazione diretta utilizzando la msbuildriga di comando (da un file batch) rispetto alla costruzione dall'interno di VS.

Usando qualcosa di simile al seguente:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(nota: start XCOPYanziché XCOPYutilizzato per aggirare un problema di autorizzazioni che ha impedito la copia)

La macro è stata $(SolutionDir)valutata ..\durante l'esecuzione di msbuild da un file batch, con conseguente XCOPYerrore del comando. In caso contrario, funzionava bene se creato da Visual Studio. Confermato con /verbosity:diagnosticper vedere l'output valutato.

L'uso della macro $(ProjectDir)..\invece, che equivale alla stessa cosa, ha funzionato bene e ha mantenuto il percorso completo in entrambi gli scenari di compilazione.


1
collegamento incrociato con lo stesso hack nel caso in cui mi dimenticassi di dare credito ...
drzaus,

Startha funzionato per me (per xcopyuna cartella condivisa).
AgentFire,

4

Non avrebbe senso usare direttamente msbuild? Se lo stai facendo con ogni build, puoi aggiungere un'attività msbuild alla fine? Se vuoi solo vedere se non riesci a trovare un altro valore di macro che non è mostrato sull'IDE di Visual Studio, puoi attivare le opzioni di msbuild in diagnostica e che ti mostreranno tutte le variabili che potresti usare, come così come il loro valore attuale.

Per attivarlo in Visual Studio, vai su Strumenti / Opzioni, quindi scorri verso il basso la vista ad albero fino alla sezione chiamata Progetti e soluzioni, espandi quella e fai clic su Crea ed esegui, a destra c'è un menu a discesa che specifica la verbosità dell'output di costruzione , impostandolo su diagnostico, ti mostrerà quali altri valori macro potresti usare.

Perché non so bene fino a che livello vorresti arrivare e quanto complesso desideri che la tua build sia, questo potrebbe darti un'idea. Recentemente ho fatto script di build, che eseguono anche il codice SQL come parte della build. Se desideri un po 'più di aiuto o anche alcuni script di compilazione di esempio, fammi sapere, ma se è solo un piccolo processo che vuoi eseguire alla fine della compilazione, forse lo script completo di msbuild è un po' eccessivo .

Spero che aiuti Rihan


grazie Rihan, ma a quanto pare VS 2003 non sembra supportarlo! Sono ovviamente abbastanza contento dell'evento post build ;-)
Preets

Non mi rendevo conto che era vs2003, e quindi l'utilizzo di msbuild come possibile soluzione, se ricordo che vs2003 era pre l'era di msbuild? Grazie per la risposta.
Buona
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.