为什么不以我期望的方式评估我的财产?

时间:2013-03-26 21:33:24

标签: powershell psake

我有一个简单的psake脚本:

properties {
    $SolutionDir = "SOLUTIONDIR" # Resolve-Path ".\src"
    $Config = "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 -properties @{"Config"="Staging"}

我希望$DeployBaseDir等于SOLUTIONDIR\RMSS.Setup.WiX\bin\Staging

但相反,我得到了这个输出:

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

任何人都可以告诉我发生了什么,为什么以及如何获得我期望的行为?

2 个答案:

答案 0 :(得分:11)

从这里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并在任务块中创建它

答案 1 :(得分:0)

如果您仍想使用属性的默认值,同时在这里使用参数是示例操作方法。

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测试)

这鼓励使用约定优于配置,并允许老学生继续使用配置意大利面。