【发布时间】:2012-03-31 19:05:52
【问题描述】:
我正在尝试在自动构建服务器处理中部署数据库项目( dbproj 格式,而不是新的 SSDT sqlproj )。我发现了以下内容:
当我在我的 Msbuild 脚本中使用 Exec 任务调用部署时 - 一切正常:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
但是当我尝试使用 Msbuild 任务重复此操作时 - 它的行为不同:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
Msbuild 任务在 DeployDatabaseConnectionString 中的分号处中断:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
它会报告如下内容:
名称“Integrated Security”包含无效字符“ ”。
但是如果我用百分比编码值替换分号 - %3B - 它会在 SqlDeployTask 内部中断:
错误 MSB4018:“SqlDeployTask”任务意外失败。
将 TargetConnectionString 传递给 SqlProject 的部署目标的正确方法是什么?
PS:我可以接受 exec 任务,但在 msbuild 脚本中调用 msbuild.exe 只会伤害我内心的完美主义者。
【问题讨论】:
标签: deployment msbuild database-project