Установка значения свойства в одной задаче и использование обновленного значения в другой - PullRequest
3 голосов
/ 28 января 2012

В моем скрипте сборки psake у меня есть свойство $ build_mode, для которого я установил «Release».

У меня 2 задачи;"Compile_Debug", "Compile_Release".В Compile_Debug я изменяю $ build_mode на «Debug», и он отлично работает, пока эта задача выполняется;однако, если у меня есть другая задача, которая впоследствии выполняет $ build_mode, $ build_mode возвращается к «Release».

Есть ли способ глобально изменить или установить переменную в скрипте сборки Psake, чтобыобновленное значение может использоваться между задачами?

(я пытаюсь сделать 1 задачу "test" или 1 "package" вместо "Test_Debug" и т. д.)

Код:

properties {
    $build_mode = "Release"
}

task default -depends Compile_Debug, Test

task Compile_Debug {
    $build_mode = "Debug"
    # Compilation tasks here that use the Debug value
}

task Test {
        # Test related tasks that depend on $build_mode being updated.
}

Ответы [ 2 ]

4 голосов
/ 20 марта 2012

Я обычно устанавливаю режим сборки в соответствии с предложением @manojlds, передавая его в качестве параметра в вызове Invoke-Psake. Но если вы снова окажетесь в ситуации, когда хотите изменить значение объекта в задаче A и получить доступ к измененному значению в задаче B, вот как это сделать:

Тот факт, что измененное значение $ build_mode недоступно в задаче B, связано с ограничением возможностей powershell. Когда вы задаете значение для переменной $ buildMode в Задаче A, это изменение вносится в область действия Задачи A, поэтому за ее пределами значение переменной остается неизменным.

Один из способов добиться того, чего вы хотите, - это использовать хеш-таблицу, ограниченную всем сценарием, для хранения ваших объектов:

Код:

properties {
    #initializes your global hash
    $script:hash = @{}
    $script:hash.build_mode = "Release"
}

task default -depends Compile_Debug, Test

task Compile_Debug {
    $script:hash.build_mode = "Debug"
    # Compilation tasks here that use the Debug value
}

task Test {
        # Test related tasks that depend on $script:hash.build_mode being updated.
}

Единственное предостережение в том, что каждый раз, когда вы хотите обратиться к своему режиму сборки, вы должны использовать длинное имя $ script: hash.build_mode вместо простого $ build_mode

2 голосов
/ 28 января 2012

Почему бы вам не передать режим сборки в качестве параметра задачам из Invoke-Psake?

 Invoke-Psake "$PSScriptRoot\Deploy\Deploy.Tasks.ps1" `
        -framework $conventions.framework `
        -taskList $tasks `
        -parameters @{
                "build_mode" = "Debug"
            }

А в заданиях теперь можно использовать $build_mode

...