2010-11-25 16 views
3

私はNantスクリプトを作成しようとしていますが、これまではうまくいっていますが、ファイルの場所をハードコードしたくありません。これは、私がやっているように見えないnunit-console.exeを実行するまで、うまくいきました。私はこれまでに関係することはある発見した:NUnitへのパスを取得する方法nunit-console.exe

<target name="test"> 
     <property name="windows-path" value="${string::to-lower(environment::get-variable('PATH'))}"/> 
     <property name="nunit-in-path" value="${string::contains(windows-path, 'nunit')}"/> 
     <echo message="${nunit-in-path}"/> 
</target> 

しかし、これは毎回失敗したので、私は物事のカップルを知っていただきたいと思います:

  1. string::to-lower(environment::get-variable('PATH'))が実際に何をしますか?
  2. どのようなバージョンのWindowsを使用しているのか、nunit-console.exeをどこに置いても、これが壊れないようにするにはどうすればよいですか? (例えば、私は私のラップトップ上で私のPC上ではなく、プログラムファイル内のプログラムファイルでNUnitの(x86の)を持っている)
+2

私は通常、これを気にしない - 私は、ソース管理に私のNUnitの分布を確認した後、私はティムに同意ビルドスクリプト –

+1

からの相対パスを使用します。あなたのバージョンのNUnitが既知の場所でソース管理にチェックインされていない限り、PCに同じ_version_が存在することを確認するのは難しいです。 NUnitの開発者は、この目的のために特にインストールする必要のないパッケージを提供しています:) –

+0

どうすればいいですか? – Siemsen

答えて

1

[OK]を、私は今それを持っているように見える、これは私のスクリプトは、今どのように見えるかです:

<?xml version="1.0"?> 
<project name="Calculator" default="execute" basedir="."> 
    <property name="InstallationDir" value="C:\BoolCalc" readonly="false"/> 
    <property name="NUnitLocation" value="${path::combine(directory::get-current-directory(), 'NUnit\bin\net-2.0\nunit-console.exe')}" readonly="false" /> 

    <description>The build scripts for the bool calculator</description> 

    <target name="clean" description="Remove all previous versions and generated files"><!--This ensures that old files are deleted if they are there and does nothing if they aren't--> 
     <delete dir="${InstallationDir}" failonerror="false" /><!-- This deletes the directory on your computer for the previous versions, if there are any --> 
     <delete file="test\Calc.exe" failonerror="false" /> 
    </target> 

    <target name="build" description="compiles the source code" depends="clean"> 
     <csc target="exe" output="test\Calc.exe" > 
      <sources> 
       <include name="src\*.cs" /> 
      </sources> 
      <references> 
       <include name="lib\nunit.framework.dll" /> 
      </references> 
     </csc> 
    </target> 

    <target name="testProgram" description="Run unit tests" depends="build"> 
     <exec program="${NUnitLocation}" 
     workingdir="test\" 
     commandline="Calc.exe /xml:TestResults.xml /nologo" /> 
    </target> 

    <target name="install" depends="testProgram"> 
     <echo message="Installing the boolean calculator to ${InstallationDir}"/> 
     <copy todir="${InstallationDir}" overwrite="true"> 
      <fileset basedir="test\"> 
       <include name="Calc.exe" /> 
      </fileset> 
     </copy> 
    </target> 

    <target name="execute" depends="install"> 
     <echo message="Executing the calculator in ${InstallationDir}"/> 
     <exec program="${InstallationDir}\Calc.exe" commandline="Calc.exe" /> 
    </target> 
</project> 

私がアドバイスを取り、NUnitのはWORKINGDIRにファイルをして、組み合わせて使用​​することにより、完全なパスを作成詰めし、 get-current-directory()は正確な場所を取得します。

このスクリプトに間違いがあるか、改善される可能性がある場合は、教えてください。 そして、私が混乱していたことを説明してくれたcalaveraに感謝しました(私がそれを行うことができないかどうかは分かりませんでした)。そしてソリューションのためのTim RobinsonとMark Simpsonに感謝します。

+0

は、彼らが我々がコンパイルクラスの束があるので、あなたのユニットテストは、彼らはexeファイル内に配置されている別のDLL –

+0

をCALC.EXEの内側に位置していないと仮定すると、私にはよさそうです。 – Siemsen

3
  1. それがPATH環境変数を取得していることを確認し
  2. を小文字にすべて大文字に変換nunit-console.exeのパスは、このnantスクリプトを実行しているマシン上のPATHにあります。パスを確認するには、cmd(コマンドプロンプト)でecho %PATH%と入力し、powershellに$env:PATHと入力します。

ので、仮定のNUnit-CONSOLE.EXEは、C:\プログラムファイル\ NUnitの\ビン

右進んに行き、自分のコンピュータ上でクリックし、永久にあなたのパスを変更するには - >環境変数

-OR-

、バッチスクリプトでは、あなたはこのNAntのスクリプトを実行する直前に、動的にそれを行う実行するには、次の

set PATH="%PATH%;c:\Program Files\Nunit\bin"

またはPowerShellで、実行:あなたはまた、C置き換えることができます

$env:PATH += ';c:\program files\nunit\bin'

:PowerShellでは、私はそれが$env:ProgramFiles${env:ProgramFiles(x86)}だと思う...関連する環境変数に\プログラムファイルを...私はそれがかもしれないと思いますコマンドプロンプトで%PROGRAMFILES%になりますが、間違っている可能性があります。ただし、setと入力すると、コマンドプロンプトですべての変数の一覧を取得できます。

システムパスにnunitを設定するのは、PATH変数にnunitが含まれているマシンでスクリプトを修正せずに動作するため、おそらくもっと似ています。

+0

ええ、NUnitがそこになければ、まだ問題は発生します。しかしPATHが何を知っていないのかを説明してくれてありがとう。 – Siemsen

+0

そうですね、実際には各マシンのパスを永久に設定する方がより信頼性が高いと思います。私は以前の仕事でビルドマシンのセットアップの一部としてこれをやっていました。それだけで数台のマシンだ場合、それは大したことではないのですが、あなたは、あなたが質問のコメンターが参照しているかのような、より静的な何かをしたいと思います。その場合にはマシンの多くを、持っている場合、それは面倒である可能性があります。基本的には、nunitバイナリファイルを外部/ nunitのようなフォルダ内のソースコードの一部としてチェックインすることができます。上記のようにPATHを変更して(私が説明した2番目の方法)、外部/ nunitフォルダーのパスを追加します。 –

関連する問題