24

我有一个开源项目,我试图在其中允许在 MonoDevelop(包括 *nix)和 Visual Studio 上进行开发。我最近发现的一个需求是我需要将输出文件从一个目录复制到另一个(相对路径)。

然而,Windows 有copy命令,而 *nix 有cp命令。让它在两个平台上工作并解决这种命令差异的最佳方法是什么?

4

3 回答 3

21

在可能的情况下,如果您可以依靠内置的 MSBuild 任务而不是自定义 shell 脚本,则该行为通常可以在 xbuild(以及因此 MonoDevelop?)上运行而无需任何更改,因此不需要特定于平台的 *proj hack。

例如:

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

这是来自单声道文档: http ://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents

于 2016-02-23T06:29:29.090 回答
17

您可以使用该$OS变量根据环境进行不同的构建后事件。为此,您必须手动编辑 csproj,例如:

<PostBuildEvent Condition="'$(OS)' == 'Windows_NT' ">
    dir
</PostBuildEvent>
<PostBuildEvent Condition="'$(OS)' != 'Windows_NT'">
    ls
</PostBuildEvent>
于 2016-02-11T09:41:48.857 回答
1

您可以使用 Python 之类的语言编写构建后脚本。或者您可以要求其他开发人员安装 GnuWin32 CoreUtils 作为安装 CygWin 的一个选项。CoreUtils 包括 cp。然后你可以无条件地使用cp。

于 2014-04-15T01:04:10.600 回答