我有一个简单的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
任何人都可以告诉我发生了什么,为什么以及如何获得我期望的行为?
答案 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测试)
这鼓励使用约定优于配置,并允许老学生继续使用配置意大利面。