在MonoDevelop和Visual Studio上使带有后构建脚本的项目正常工作的最佳方法是什么?

25

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

然而,Windows有copy命令,*nix有cp命令。如何最好地让它们在两个平台上都能正常工作,并解决这些命令间的差异?


如果您真的坚持要一个脚本适用于所有情况,您可能需要查看Cygwin,它为Windows提供了“Linux外观和感觉环境”。在此处查看更多信息:http://www.cygwin.com/。 - nieve
2
@nieve 我已经安装了它,我只是不想强制让所有想在Windows上编译我的项目的人都去安装它。 - Earlz
你可以添加一种安装脚本(类似于rake/make),以设置其他开发人员的环境,该脚本将根据操作系统决定使用哪个后构建脚本。如果你查看如何构建MonoDevelop,你会发现他们为不同的环境/操作系统使用完全不同的机制。 - nieve
1
@Earlz 你在这里找到解决方案了吗?我只需要复制一个DLL文件...让每个人都安装cygwin只是为了一个复制命令有点过度kill。 - SJoshi
@Earlz 我想到的最好方法就是在Linux上为xcopy创建一个别名,使其等同于'cp-r'命令。 据我所知,我的标准Linux发行版中没有xcopy这个命令,而且在Ubuntu上也肯定没有类似的安装文件...所以,是的。 - SJoshi
3个回答

22

如果可能的话,尽量使用内置的MSBuild任务而不是自定义脚本,这样的行为通常可以在xbuild(和因此MonoDevelop?)上正常工作,无需进行任何更改,因此无需进行平台特定的*proj修改。

例如:

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

这段内容来自Mono的文档: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents


18

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

您可以使用$OS变量根据环境不同设置不同的后构建事件。为此,您需要手动编辑csproj文件,例如:

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

此功能无法与Visual Studio集成。 - Daniel Däschle
@DanielDäschle - 你是什么意思?这是否使得这个答案变得不有用了? - StingyJack
我记不得我当时的意思了。就当我没说吧 :D - Daniel Däschle

1
你可以使用像Python这样的编程语言编写发布后脚本。或者,您可以要求其他开发人员安装GnuWin32 CoreUtils作为安装CygWin的选项。CoreUtils包括cp。然后你就可以无条件地使用cp。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接