如何获取NUnit nunit-console.exe的路径

时间:2010-11-25 18:13:42

标签: path nunit nant

我正在尝试创建一个Nant脚本,到目前为止它一直很顺利,但我希望不要硬编码文件位置。这是好的,直到我必须执行我似乎无法做的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上的程序文件(x86)中有NUnit,但我的笔记本上的程序文件中有NUnit)

2 个答案:

答案 0 :(得分:3)

  1. 它获取PATH环境变量并将所有大写字母转换为小写
  2. 确保在运行此nant脚本的任何计算机上,nunit-console.exe的路径都在您的PATH中。要检查路径,可以在cmd(命令提示符)中键入echo %PATH%,在powershell中键入$env:PATH
  3. 因此,假设nunit-console.exe位于c:\ Program Files \ Nunit \ bin

    要永久修改您的路径,请右键单击我的计算机,转到高级 - &gt;环境变量

    -OR -

    要在运行此nant脚本之前动态执行此操作,请在批处理脚本中运行:

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

    或在powershell中,运行:

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

    你也可以用相关的环境变量替换c:\ Program Files ...在Powershell中我认为它是$env:ProgramFiles${env:ProgramFiles(x86)} ...我认为它可能是%PROGRAMFILES%命令提示符,但我可能错了。但是您可以键入set以获取命令提示符中所有变量的列表。

    在你的系统路径中设置nunit可能更像你正在尝试做的事情,因为脚本在PATH变量中包含nunit的任何机器上都可以不加修改地工作。

答案 1 :(得分:1)

好的我现在好了,这就是我的脚本现在的样子:

<?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中,然后使用combine和get-current-directory()创建一个完整的路径来获取它的确切位置。

如果您发现此脚本有任何问题或可以改进的地方,请告诉我们。 感谢calavera解释我对此感到困惑(不知道我能做到这一点)并感谢Tim Robinson和Mark Simpson的解决方案。