【发布时间】:2014-07-22 14:45:53
【问题描述】:
在我的 Build.proj 文件中,我有以下属性:
<DbName Condition="$(DbName) == ''">MyDB</DbName>
<ConnectionString Condition="$(ConnectionString) == ''">"Data Source=localhost;Initial Catalog=$(DbName);Integrated Security=SSPI;MultipleActiveResultSets=True"</ConnectionString>
我有一个PowerShell函数如下:
function Update-Database
{
param(
$DbName=""
)
msbuild $MSBuildFile /maxcpucount /verbosity:Minimal /target:DatabaseUpdate /p:DbName=$DbName
}
在 PowerShell 中运行函数我得到以下结果:
-
Update-Database MyDB:完美运行 -
Update-Database:失败。在这种情况下,MSBuild 不使用默认的“MyDB”。相反,它使用 ''
如果我修改这一行:
msbuild $MSBuildFile /maxcpucount /verbosity:Minimal /target:DatabaseUpdate /p:DbName=$DbName
到这里:
msbuild $MSBuildFile /maxcpucount /verbosity:Minimal /target:DatabaseUpdate
运行“UpdateDatabase”使用默认的“MyDB”,一切正常。
如果我想选择使用默认值或传入新值,是否必须将整个 msbuild... 命令包装在 if else 中?或者有没有办法有条件地传入参数?
更新
我试图避免在 ps 函数中设置默认值。基本上我想在没有 if 的情况下模拟这种行为:
function Update-Database
{
param(
$DbName=""
)
if($DbName -eq "")
{
msbuild $MSBuildFile /maxcpucount /verbosity:Minimal /target:DatabaseUpdate
}
else
{
msbuild $MSBuildFile /maxcpucount /verbosity:Minimal /target:DatabaseUpdate /p:DbName=$DbName
}
}
【问题讨论】:
-
你必须混合它们吗?例如,为什么您不能在 Update-Database 中定义 $DBName='MyDB'?
-
您的脚本现在按设计运行。如果 dbname 为空,您希望它忽略 msbuild 上的那个开关。对吗?
-
您希望默认始终为 MyDB 吗?在这种情况下,您只需将
$DbName=""行更改为$DbName="MyDB",如果没有传递参数,则将使用该行 -
我试图避免在 ps 函数中设置默认值。请参阅上面的更新部分。
标签: powershell msbuild