加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – NAnt和双平台构建 – 在Windows和Mono / Linux上构建的

发布时间:2020-12-14 01:50:22 所属栏目:Windows 来源:网络整理
导读:我是NAnt的新手,但对Ant和CruiseControl有一些经验. 我想要做的是让我的SVN项目包括所需的所有工具(如NUnit和Mocks等),这样我就可以检查一台新机器并进行构建. J.P Boodhoo here.概述了这一策略 到目前为止,如果我只想在Windows上运行那么好,但我希望能够检
我是NAnt的新手,但对Ant和CruiseControl有一些经验.

我想要做的是让我的SVN项目包括所需的所有工具(如NUnit和Mocks等),这样我就可以检查一台新机器并进行构建. J.P Boodhoo here.概述了这一策略

到目前为止,如果我只想在Windows上运行那么好,但我希望能够检查到Linux并构建/测试/运行Mono.我不希望SVN项目外部有依赖项.我不介意在项目中有两套工具,但只想要一个NAnt构建文件

这一定是可能的 – 但是怎么样?什么是招数/’年轻球员的陷阱’

这不应该是一个特别困难的练习.我们在我的一个项目上做了一些非常相似的事情,因为有一半是在Java上使用Ant来运行相关目标,而另一半是用于UI的.Net(C#).这些项目在Windows机器上运行以进行开发,但服务器(Java)运行linux,但在UAT环境(linux)中我们需要运行nunits(集成测试).这背后的真正技巧(不是一个非常困难的技巧)是拥有一个可以在两个环境中运行的NAnt构建文件,这似乎与你在这里尝试做的事情相同.

当然你意识到你需要先在Mono上安装NAnt:

$export MONO_NO_UNLOAD=1
$make clean
$make
$mono bin/NAnt.exe clean build

然后你的构建文件需要以一种分离问题的方式编写.例如,为windows编写的构建文件的某些部分在linux中不起作用.所以你真的只需要将它划分为构建文件中的特定目标.之后,您可以通过多种方式从命令行运行特定目标.示例可能如下所示:

<project name="DualBuild">
  <property name="windowsDotNetPath" value="C:WINDOWSMicrosoft.NETFrameworkv3.5" />
  <property name="windowsSolutionPath" value="D:WorkingDirectorybranches1234source" />
  <property name="windowsNUnitPath" value="C:Program FilesNUnit-Net-2.0 2.2.8bin" />
  <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}PropertiesAssemblyInfo.cs" />
    <exec program="subwcrev.exe" basedir="C:Program FilesTortoiseSVNbin"
          workingdir="${windowsSolutionPath}Properties"
          commandline="${windowsSolutionPath} .AssemblyInfoTemplate.cs
                       .AssemblyInfo.cs" />
    <delete file="${windowsSolutionPath}PropertiesAssemblyInfo.cs" />
    <exec program="subwcrev.exe" basedir="C:Program FilesTortoiseSVNbin"
          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 FilesNCover"
          workingdir="${windowsSolutionPath}">
      <arg value="//x &quot;ClientCoverage.xml&quot;" />
      <arg value="&quot;C:Program FilesNUnit-Net-2.0 2.2.8bin
                       nunit-console.exe&quot; 
                       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 for MSBuild,svn for the tool等)

如需更多关于Mono等Nunit等的帮助,请查看this fantastic post.

希望有所帮助,

干杯,

Rob G

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读