如何将连接字符串作为参数发送到MsBuild以执行SQL架构比较?

Joh*_*ffe 7 sql msbuild sql-server-data-tools

SQL Server数据工具团队博客中提到,现在可以使用的MSBuild执行两个DacPacs或数据库的模式比较.但是,他们没有提到如何将连接字符串传递给源数据库和目标数据库.如果我设置参数/ p:source ="我的连接字符串"我得到错误:

MSBUILD:错误MSB4177:无效的属性.名称"初始目录"包含无效字符"".

我的PowerShell脚本发送到msbuild的命令行是:

msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare 
/p:source="$sourceConnString" /p:target="$targetConnString" 
/p:XmlOutput="$schemaCompareReportPath" 
Run Code Online (Sandbox Code Playgroud)

SchemaCompare.proj包含SQL Server数据工具团队博客上建议的内容

Ste*_*een 4

事实证明,您必须将连接字符串中的分号替换为%3B,如下所示:

$sourceConnString = $sourceConnString.Replace(";", "%3B")
Run Code Online (Sandbox Code Playgroud)

说明:这可以防止 SQL Server值和包含该值的ConnectionStringMSBuild /p(又名)值之间发生分隔符冲突。/properties如果没有此 URL 编码,MSBuild 将标记ConnectionString分号,而不是完整传递整个值(以便 SQL Server 客户端库进行标记)。这也适用于MSBuild TaskProperties的属性。

参考: