我有一个开源项目,我试图在MonoDevelop(包括* nix)和Visual Studio上进行开发。 我最近发现的一个要求是我需要将输出文件从一个目录复制到另一个目录(相对path)。
然而,Windows具有copy
命令,而* nix具有cp
命令。 什么是最好的方式来使这两个平台上的工作,并解决这种差异的命令?
您可以使用$OS
变量根据环境具有不同的后期构建事件。 要做到这一点,你必须手工编辑csproj,如:
<PostBuildEvent Condition="'$(OS)' == 'Windows_NT' "> dir </PostBuildEvent> <PostBuildEvent Condition="'$(OS)' != 'Windows_NT'"> ls </PostBuildEvent>
在可能的情况下,如果您可以依靠内置的MSBuild任务而不是定制的shell脚本,那么行为通常将在xbuild(以及MonoDevelop?)上工作而不做任何更改,因此不需要特定于平台的* proj。
例如:
<Target Name="AfterBuild"> <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" /> </Target>
这是来自单声道文档: http : //www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents
你可以使用像Python这样的语言编写构建脚本。 或者您可以要求其他开发者安装GnuWin32 CoreUtils作为安装CygWin的选项。 CoreUtils包括cp。 那么你可以无条件地使用cp。