Cela ne devrait pas être un exercice particulièrement difficile. Nous faisons des choses assez similaires sur un de mes projets puisque la moitié de celui-ci fonctionne sur Java en utilisant Ant pour exécuter des cibles pertinentes, et l'autre moitié est .Net (C#) pour l'interface utilisateur. Les projets sont exécutés sur des machines Windows pour le développement, mais les serveurs (Java) exécutent Linux, mais dans l'environnement UAT (linux), nous devons exécuter les nunits (tests d'intégration). Le vrai truc (pas vraiment un truc difficile) derrière cela est d'avoir un fichier de construction NAnt qui peut fonctionner dans les deux environnements, ce qui semble être la même chose que vous essayez de faire ici.
Bien sûr, vous réalisez que vous devez installer sur NAnt Mono premier:
$ export MONO_NO_UNLOAD=1
$ make clean
$ make
$ mono bin/NAnt.exe clean build
Et puis votre fichier de construction doit être écrit de telle manière qu'il seperates préoccupations. Certaines parties du fichier de construction écrites pour Windows ne fonctionneront pas dans Linux par exemple. Donc, vous avez juste besoin de le diviser en cibles spécifiques dans le fichier de construction. Après cela, il existe plusieurs façons d'exécuter des cibles spécifiques à partir de la ligne de commande. Un exemple pourrait ressembler à ceci:
<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>
Par souci de brièveté, j'ai laissé les deux côtés. La chose intéressante est que vous pouvez utiliser NUnit ainsi que NAnt sur les deux environnements et cela rend les choses vraiment faciles du point de vue de la dépendance. Et pour chaque exécutable, vous pouvez échanger pour d'autres qui fonctionnent dans cet environnement, par exemple (xBuild pour MSBuild, et svn pour tortue etc.)
Pour plus d'aide sur Nunit etc sur Mono, consultez this fantastic post.
Espoir qui aide,
Cheers,
Rob G