Esto no debería ser un ejercicio particularmente difícil. Hacemos algunas cosas bastante similares en uno de mis proyectos, ya que la mitad se ejecuta en Java utilizando Ant para ejecutar objetivos relevantes, y la otra mitad es .Net (C#) para la interfaz de usuario. Los proyectos se ejecutan en máquinas Windows para desarrollo, pero los servidores (Java) ejecutan Linux, pero en el entorno UAT (Linux) necesitamos ejecutar los nunits (pruebas de integración). El verdadero truco (que en realidad no es un truco difícil) es tener un archivo de compilación NAnt que se pueda ejecutar en ambos entornos, lo que parece ser lo mismo que intenta hacer aquí.
Por supuesto se da cuenta que tendrá que instalar de NAnt en Mono primera:
$ export MONO_NO_UNLOAD=1
$ make clean
$ make
$ mono bin/NAnt.exe clean build
Y entonces su fichero de construcción necesita ser escrita de tal manera que separa preocupaciones. Algunas partes del archivo de compilación escrito para Windows no funcionarán en Linux, por ejemplo. Entonces realmente solo necesitas dividirlo en objetivos específicos en el archivo de compilación. Después de eso, hay varias formas de ejecutar objetivos específicos desde la línea de comando. Un ejemplo podría verse así:
<project name="DualBuild">
<property name="windowsDotNetPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5" />
<property name="windowsSolutionPath" value="D:\WorkingDirectory\branches\1234\source" />
<property name="windowsNUnitPath" value="C:\Program Files\NUnit-Net-2.0 2.2.8\bin" />
<property name="monoPath" value="You get the idea..." />
<target name="BuildAndTestOnWindows" depends="WinUpdateRevision, WinBuild, WinTest" />
<target name="BuildAndTestOnLinux" depends="MonoUpdateRevision, MonoBuild, MonoTest" />
<target name="WinUpdateRevision">
<delete file="${windowsSolutionPath}\Properties\AssemblyInfo.cs" />
<exec program="subwcrev.exe" basedir="C:\Program Files\TortoiseSVN\bin\"
workingdir="${windowsSolutionPath}\Properties"
commandline="${windowsSolutionPath} .\AssemblyInfoTemplate.cs
.\AssemblyInfo.cs" />
<delete file="${windowsSolutionPath}\Properties\AssemblyInfo.cs" />
<exec program="subwcrev.exe" basedir="C:\Program Files\TortoiseSVN\bin\"
workingdir="${windowsSolutionPath}\Properties"
commandline="${windowsSolutionPath} .\AssemblyInfoTemplate.cs
.\AssemblyInfo.cs" />
</target>
<target name="WinBuild">
<exec program="msbuild.exe"
basedir="${windowsDotNetPath}"
workingdir="${windowsSolutionPath}"
commandline="MySolution.sln /logger:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,
ThoughtWorks.CruiseControl.MsBuild.dll;msbuild-output.xml
/nologo /verbosity:normal /noconsolelogger
/p:Configuration=Debug /target:Rebuild" />
</target>
<target name="WinTest">
<exec program="NCover.Console.exe"
basedir="C:\Program Files\NCover"
workingdir="${windowsSolutionPath}">
<arg value="//x "ClientCoverage.xml"" />
<arg value=""C:\Program Files\NUnit-Net-2.0 2.2.8\bin
\nunit-console.exe"
MySolution.nunit /xml=nunit-output.xml /nologo" />
</exec>
</target>
<target name="MonoUpdateRevision">
You get the idea...
</target>
<target name="MonoBuild">
You get the idea...
</target>
<target name="MonoTest">
You get the idea...
</target>
</project>
Por brevedad, he dejado ambos lados. Lo bueno es que puedes usar NUnit y NAnt en ambos entornos, y eso hace las cosas realmente fáciles desde el punto de vista de la dependencia. Y para cada ejecutable puede cambiar para otros que trabajan en ese entorno, por ejemplo (xBuild para MSBuild y svn para tortuga, etc.)
Para obtener más ayuda sobre Nunit, etc. en Mono, consulte this fantastic post.
Espero que ayude,
Cheers,
Rob G