Это не должно быть особенно сложным упражнением. Мы делаем довольно похожие вещи в одном из моих проектов, поскольку половина из них работает на Java с использованием Ant для выполнения соответствующих целей, а другая половина - .Net (C #) для пользовательского интерфейса. Проекты запускаются на машинах Windows для разработки, но серверы (Java) работают под управлением Linux, но в среде UAT (Linux) нам нужно запускать устройства (интеграционные тесты). Настоящий трюк (не совсем сложный трюк) в этом заключается в том, чтобы иметь файл сборки NAnt, который может работать в обеих средах, что, похоже, является тем же, что вы пытаетесь сделать здесь.
Конечно, вы понимаете, что сначала вам нужно установить NAnt на Mono:
$ export MONO_NO_UNLOAD=1
$ make clean
$ make
$ mono bin/NAnt.exe clean build
И тогда ваш файл сборки должен быть написан таким образом, чтобы он разделял проблемы. Например, некоторые части файла сборки, написанные для Windows, не будут работать в Linux. Так что вам действительно нужно разделить его на конкретные цели в файле сборки. После этого есть несколько способов запуска определенных целей из командной строки. Пример может выглядеть так:
<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>
Для краткости я оставил обе стороны. Важно то, что вы можете использовать как NUnit, так и NAnt в обеих средах, и это действительно упрощает задачу с точки зрения зависимости. И для каждого исполняемого файла вы можете поменяться с другими, которые работают в этой среде, например (xBuild для MSBuild, svn для черепахи и т. Д.)
Для получения дополнительной помощи по Nunit и т. Д. В Mono, прочитайте этот фантастический пост .
Надеюсь, это поможет,
Приветствия
Роб Г