6

私はNAntは初めてですが、AntとCruiseControlの経験があります。

私がやりたいことは、SVN プロジェクトに必要なすべてのツール (NUnit や Mocks など) を含めて、新しいマシンにチェックアウトしてビルドできるようにすることです。この戦略は JP Boodhoo によってここで概説されています。

これまでのところ、Windows でのみ実行したい場合は問題ありませんが、Linux にチェックアウトして、Mono に対してもビルド/テスト/実行できるようにしたいと考えています。SVN プロジェクトの外部に依存関係がないようにします。プロジェクトに 2 セットのツールを使用してもかまいませんが、NAnt ビルド ファイルは 1 つだけ必要です

これは可能であるに違いありませんが、どうやって?トリックは何ですか / 「若いプレーヤーのためのトラップ」

4

4 に答える 4

8

これは特に難しい演習ではありません。プロジェクトの半分は Ant を使用して Java で実行され、関連するターゲットを実行し、残りの半分は UI 用の .Net (C#) であるため、私のプロジェクトの 1 つでかなり似たようなことを行います。プロジェクトは開発用に 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:\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 &quot;ClientCoverage.xml&quot;" />
      <arg value="&quot;C:\Program Files\NUnit-Net-2.0 2.2.8\bin
                       \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 を使用できることです。これにより、依存関係の観点から非常に簡単になります。また、実行可能ファイルごとに、その環境で動作する他のものと交換できます (MSBuild の場合は xBuild、亀の場合は svn など)。

Mono の Nunit などについて詳しくは、この素晴らしい投稿をご覧ください。

それが役立つことを願って、

乾杯、

ロブ G

于 2008-08-28T13:47:12.423 に答える
2

@Rob G-やあ!それが私の投稿です!;)

その他の良い例については、必ずNUnitソースコードを参照してください。チャーリーがMonoでビルドおよびテストされていることを確認するために、できる限りチャーリーと緊密に協力しています。彼はできる限り走ろうとします。

于 2008-09-05T15:50:59.500 に答える
1

Nantのような多くのツールは、「箱から出してすぐに」モノで実行されることに注意してください。

mono nant.exe

作品

于 2008-09-05T15:43:46.117 に答える
0

以下のテンプレートを使用しています。buildこれにより、任意のプラットフォーム ( Win またはLinux) での簡単なビルドが可能./build.shになり、ビルド スクリプトの重複が最小限に抑えられます。


NAnt 実行可能ファイルは、プロジェクトとともに に保存されtools\nantます。

ビルド構成ファイルは、使用するビルド ツール (MSBuild または xbuild) を決定します (この場合、Windows には VS2015 MSBuild バージョンが必要で、必要に応じてパスを変更します)。

ビルド ターゲットはbuild-csproj、ソリューション内に複数のプロジェクトがある場合に再利用できます。

必要に応じてtest-projectターゲットを拡張する必要があります。

build.bat

@tools\nant\nant.exe %*

build.sh

#!/bin/sh

/usr/bin/cli tools/nant/NAnt.exe "$@"

default.build

<?xml version="1.0"?>
<project name="MyProject" default="all">

  <if test="${not property::exists('configuration')}">
    <property name="configuration" value="release" readonly="true" />
  </if>

  <if test="${platform::is-windows()}">
    <property name="BuildTool" value="C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" readonly="true"/>
  </if>
  <if test="${platform::is-unix()}">
    <property name="BuildTool" value="xbuild" readonly="true"/>
  </if>

  <property name="TestTool" value="tools/mytesttool.exe"/>

  <target name="all" depends="myproject myprojectlib" />

  <target name="build-csproj" description="Build a given csproj">
    <!-- Must not be called standalone as it requires some properties set. -->
    <exec program="${BuildTool}">
      <arg path="src/${ProjectName}/${ProjectName}.csproj" />
      <arg line="/property:Configuration=${configuration}" />
      <arg value="/target:Rebuild" />
      <arg value="/verbosity:normal" />
      <arg value="/nologo" />
    </exec>
  </target>

  <target name="test-project">
    <!-- Must not be called standalone as it requires some properties set. -->
    <exec program="${TestTool}">
      <arg path="my/${ProjectName}/tests/path/for/tool" />
      <arg value="/aproperty=value" />
    </exec>
  </target>

  <target name="myproject" description="Build the project">
    <property name="ProjectName" value="MyProject"/>
    <call target="build-csproj" />
    <call target="test-project" />
  </target>

  <target name="myprojectlib" description="Build the project's library dll">
    <property name="ProjectName" value="MyProjectLib"/>
    <call target="build-csproj" />
    <call target="test-project" />
  </target>

</project>
于 2016-01-14T05:45:42.940 に答える