2012-10-31 9 views
10

Mam projekt open source, w którym próbuję umożliwić rozwój zarówno w MonoDevelop (w tym * nix) i Visual Studio. Jednym z moich niedawno odkrytych wymagań jest konieczność skopiowania wyjściowego pliku z jednego katalogu do innego (ścieżka względna).Najlepszy sposób na wykonanie projektu ze skryptem post-build w MonoDevelop i Visual Studio?

System Windows ma jednak polecenie copy, podczas gdy * nix ma polecenie cp. Jaki jest najlepszy sposób, aby to działało na obu platformach i rozwiązać tę różnicę poleceń?

+0

Jeśli jesteś naprawdę nieugięty o posiadaniu jednego skryptu dla wszystkich, warto rzucić okiem do Cygwin, który przewiduje " wygląd i styl systemu Linux dla Windows. " zobacz więcej tutaj: http://www.cygwin.com/ – nieve

+1

@nieve Mam to zainstalowane, po prostu nie chciałem zmuszać każdego, kto chce skompilować mój projekt w systemie Windows, aby go zainstalować – Earlz

+0

Możesz dodać coś w rodzaju skrypt instalacyjny (coś w stylu rake/make), aby skonfigurować środowisko innych programistów, którzy zdecydują, że skrypt po kompilacji będzie używany zgodnie z systemem operacyjnym. Jeśli spojrzysz na sposób budowania MonoDevelop, zobaczysz, że używają różnych mechanizmów w różnych środowiskach/systemach operacyjnych. – nieve

Odpowiedz

0

Możesz napisać skrypt budujący post w języku takim jak Python. Lub możesz wymagać od innych programistów, aby zainstalowali GnuWin32 CoreUtils jako opcję instalacji CygWin. CoreUtils zawiera cp. Wtedy możesz po prostu bezwarunkowo używać cp.

8

Możesz użyć zmiennej $OS, aby mieć różne zdarzenia budowania postów w zależności od środowiska. Aby to zrobić, należy edytować csproj ręcznie, jak:

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

Jeżeli jest to możliwe, czy można oprzeć się na wbudowanych zadań MSBuild zamiast niestandardowych skryptów powłoki, zachowanie generalnie będzie działał na xbuild (a więc MonoDevelop?) Bez żadnych zmian, więc nie ma potrzeby specyficznych dla platformy * hacków proj.

np

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

To z docs Mono: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents