Powershell 为什么';psake是否以我期望的方式评估我的财产?
我有一个简单的诗篇脚本:Powershell 为什么';psake是否以我期望的方式评估我的财产?,powershell,psake,Powershell,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
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
有人能告诉我发生了什么,为什么,以及如何得到我期望的行为吗?从这里开始
支持参数和属性
调用psake有两个新选项,参数和属性。参数是传递到当前构建脚本中的哈希表。这些参数是在生成脚本中的任何“属性”函数之前处理的,这意味着您可以从属性中使用它们
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,并在任务块中创建它,以防您仍然希望为属性使用默认值,同时使用参数这里是示例操作
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进行测试)
这鼓励了老一辈学生灵活地使用约定而不是配置,以便继续使用配置意大利面 在使用属性之前对其进行评估是PowerShell还是psake?”因为这太糟糕了。哦,把值放在参数中而不是属性中就像一个符咒。谢谢