Почему psake не оценивает мою собственность так, как я ожидаю?

У меня есть простой скрипт psake:

properties {
    $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src"
    $Config = "Debug"
    $DeployBaseDir = "$SolutionDir\RMSS.Setup.WiX\bin\$Config"
    $InstallerName = "RMSForMoversSuite& .\psake.ps1 .\deploy.ps1 -properties @{"Config"="Staging"}0_0"
}

task default -depends Test

task Test {
    "CONFIG = $Config"
    "SOLUTIONDIR = $SolutionDir"
    "DEPLOYBASEDIR = $DeployBaseDir"
}

И я вызываю его из командной строки следующим образом:

& .\psake.ps1 .\deploy.ps1 -properties @{"Config"="Staging"}

Я ожидаю, что $DeployBaseDir будет равно SOLUTIONDIR\RMSS.Setup.WiX\bin\Staging

Но вместо этого я получаю этот вывод:

CONFIG = Staging
SOLUTIONDIR = SOLUTIONDIR
DEPLOYBASEDIR = SOLUTIONDIR\RMSS.Setup.WiX\bin\Debug

Может ли кто-нибудь сказать мне, что происходит, почему и как добиться ожидаемого поведения?


person Josh Kodroff    schedule 26.03.2013    source источник


Ответы (2)


Отсюда http://codebetter.com/jameskovacs/2010/04/12/psake-v4-00/

Поддержка параметров и свойств

Invoke-psake имеет две новые опции: –parameters и –properties. Параметры — это хэш-таблица, передаваемая в текущий скрипт сборки. Эти параметры обрабатываются до того, как какие-либо «свойства» будут работать в ваших сценариях сборки, что означает, что вы можете использовать их из своих свойств.

invoke-psake Deploy.ps1 -parameters @{server=’Server01’}

# Deploy.ps1
properties {
  $serverToDeployTo = $server
    }

task default -depends All

Параметры хороши, когда у вас есть необходимая информация. С другой стороны, свойства используются для переопределения значений по умолчанию.

invoke-psake Build.ps1 -properties @{config='Release'}

# Build.ps1
properties {
  $config = 'Debug'
}

task default -depends All

Таким образом, вы можете либо взять $Config из свойств и передать его в качестве параметра.
Или взять $DeployBaseDir из свойств и создать его внутри блока задач.

person Paul Rowland    schedule 27.03.2013
comment
Это PowerShell или psake, что свойства оцениваются перед их использованием? Потому что это облом. - person Josh Kodroff; 27.03.2013
comment
О, и добавление значения в параметры вместо свойств сработало как шарм. Спасибо! - person Josh Kodroff; 27.03.2013

Если вы все еще хотите использовать значения по умолчанию для своих свойств и в то же время использовать параметры, вот образец инструкции.

properties {
    $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src"
    $Config = if($config){$config} else {"Debug"};
    $DeployBaseDir = "$SolutionDir\RMSS.Setup.WiX\bin\$Config"
    $InstallerName = "RMSForMoversSuite_2_0_0"
}

task default -depends Test

task Test {
    "CONFIG = $Config"
    "SOLUTIONDIR = $SolutionDir"
    "DEPLOYBASEDIR = $DeployBaseDir"
}

& .\psake.ps1 .\deploy.ps1 -parameters @{config="Staging"}

(Проверено с использованием psake 4.3.2)

Это поощряет использование соглашения вместо конфигурации с гибкостью для старых школьников, чтобы продолжать использовать свои конфигурационные спагетти.

person Pr1nz    schedule 20.05.2014