4

我有一个简单的 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

谁能告诉我发生了什么,为什么以及如何获得我期望的行为?

4

2 回答 2

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 从属性中取出并在任务块中创建它

于 2013-03-27T05:18:27.527 回答
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 测试)

这鼓励使用约定优于配置,让老学生可以灵活地继续使用他们的配置意大利面。

于 2014-05-20T02:30:21.417 回答