Лучший способ сделать проект с 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.