Лучший способ сделать проект с post-build script работать над MonoDevelop и Visual Studio?

У меня есть проект с открытым исходным кодом, в котором я пытаюсь разрешить разработку как MonoDevelop (включая * nix), так и Visual Studio. Один из моих недавно обнаруженных требований - мне нужно скопировать выведенный файл из одного каталога в другой (относительный путь).

Однако Windows имеет команду copy, тогда как * nix имеет команду cp. Каков наилучший способ заставить это работать на обеих платформах и решить эту разницу в командах?

Ответ 1

Вы можете использовать переменную $OS, чтобы иметь разные события пост-сборки в зависимости от среды. Чтобы сделать это, вы должны отредактировать csproj вручную, например:

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

Ответ 2

По возможности, если вы можете опираться на встроенные задачи MSBuild, а не на пользовательские сценарии оболочки, поведение, как правило, будет работать на xbuild (и, следовательно, MonoDevelop?) без каких-либо изменений, поэтому нет необходимости в зависящих от платформы * proj hacks.

например:

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

Это из моноданных: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents

Ответ 3

Вы можете написать post build script на языке Python. Или вы можете потребовать от других разработчиков установить GnuWin32 CoreUtils в качестве опции для установки CygWin. CoreUtils включает cp. Тогда вы можете просто безоговорочно использовать cp.