Как получить путь к NUnit nunit-console.exe - PullRequest
4 голосов
/ 25 ноября 2010

Я пытаюсь создать сценарий 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>

Но каждый раз это терпит неудачу, поэтому я хотел бы знать кое-что:на самом деле?

Как мне сделать так, чтобы это не сломалось, независимо от того, какую версию окон вы используете или где находится nunit-console.exe?(Например, у меня есть NUnit в Program Files (x86) на моем ПК, но в Program Files на моем ноутбуке)

Ответы [ 2 ]

3 голосов
/ 25 ноября 2010
  1. он получает переменную среды PATH и преобразует все заглавные буквы в строчные
  2. Убедитесь, что путь к nunit-console.exe находится в вашем PATH на любой машине, на которой вы запускаете этот скрипт nant.чтобы проверить свой путь, в cmd (командная строка) вы можете набрать echo %PATH%, в powershell вы можете набрать $env:PATH.

Итак, предполагая, что nunit-console.exe находится в каталоге c: \Program Files \ Nunit \ bin

Чтобы навсегда изменить свой путь, щелкните правой кнопкой мыши на моем компьютере, перейдите в раздел «Дополнительно» -> переменные среды

-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 в вашем системном пути, вероятно, больше похожа на то, что вы пытаетесь сделать, так как скрипт будет работать без измененийна любом компьютере, содержащем nunit в переменной PATH.

1 голос
/ 25 ноября 2010

Ладно, теперь я понял, вот как выглядит мой скрипт:

<?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 (), чтобы получить его точное местоположение.

Если вы видите что-то не так с этим скриптом или что-то, что может быть улучшено, пожалуйста, дайте мне знать.И спасибо Калавере за объяснение того, что меня смутило (я не знал, что смогу это сделать), и спасибо Тиму Робинсону и Марку Симпсону за решение.

...