2012-10-31 3 views
10

Ho un progetto open source in cui sto cercando di consentire lo sviluppo sia su MonoDevelop (incluso * nix) che su Visual Studio. Uno dei miei requisiti recentemente scoperti è che ho bisogno di copiare un file emesso da una directory a un'altra (percorso relativo).Il modo migliore per realizzare un progetto con script post-build funziona su MonoDevelop e Visual Studio?

Windows ha tuttavia il comando copy, mentre * nix ha il comando cp. Qual è il modo migliore per farlo funzionare su entrambe le piattaforme e risolvere questa differenza di comandi?

+0

Se siete veramente convinti di avere una sceneggiatura per tutti, si potrebbe desiderare di avere uno sguardo in Cygwin, che prevede " un ambiente di aspetto Linux per Windows. " vedere di più qui: http://www.cygwin.com/ – nieve

+1

@nieve Ho installato quello, non volevo forzare tutti coloro che vogliono compilare il mio progetto su Windows per installarlo – Earlz

+0

Puoi aggiungere una sorta di script di installazione (qualcosa come rake/make) per impostare l'ambiente degli altri sviluppatori, che decideranno di utilizzare lo script post-build in base al sistema operativo. Se guardi come costruire MonoDevelop, vedrai che stanno utilizzando diversi meccanismi per diversi ambienti/OS. – nieve

risposta

0

Si potrebbe scrivere lo script di post build in una lingua come Python. Oppure potresti richiedere ad altri sviluppatori di installare GnuWin32 CoreUtils come opzione per l'installazione di CygWin. CoreUtils include cp. Quindi puoi usare incondizionatamente cp.

8

È possibile utilizzare la variabile $OS per avere eventi di generazione post diversi a seconda dell'ambiente. Per fare questo, è necessario modificare il csproj a mano, come:

<PostBuildEvent Condition="'$(OS)' == 'Windows_NT' "> 
    dir 
</PostBuildEvent> 
<PostBuildEvent Condition="'$(OS)' != 'Windows_NT'"> 
    ls 
</PostBuildEvent> 
5

Ove possibile, se si può appoggiarsi su built-in attività MSBuild piuttosto che shell scripting personalizzato, il comportamento generalmente funzionerà su xbuild (e quindi MonoDevelop?) Senza modifiche, quindi non c'è bisogno di hacker specifici per piattaforma *.

esempio:

<Target Name="AfterBuild"> 
      <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" /> 
</Target> 

Questo è dalla documentazione mono: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents

Problemi correlati