SQL Server Data Tools team blog提到现在可以使用 MsBuild 来执行两个 DacPac 或数据库的架构比较。但是,他们没有确切地提到如何将连接字符串传递到源数据库和目标数据库。如果我设置参数/p:source="my connection string"我得到错误:
MSBUILD : error MSB4177: Invalid property. The name "Initial Catalog" contains an invalid character " ".
我的 PowerShell 脚本发送到 msbuild 的命令行是:
msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare
/p:source="$sourceConnString" /p:target="$targetConnString"
/p:XmlOutput="$schemaCompareReportPath"
其中 SchemaCompare.proj 包含 SQL Server Data Tools team blog 上建议的内容
最佳答案
事实证明,您必须将连接字符串中的分号替换为 %3B
,像这样:
$sourceConnString = $sourceConnString.Replace(";", "%3B")
说明:这可以防止 SQL Server
ConnectionString
之间的分隔符冲突。值和 MSBuild /p
(又名 /properties
)包含它的值。如果没有此 URL 编码,MSBuild 将标记化 ConnectionString
在分号上,而不是完整地传递整个值(用于 SQL Server 客户端库进行标记)。这也适用于 Properties
MSBuild Task 的属性.引用文献:
关于sql - 如何将连接字符串作为参数发送到 MsBuild 以执行 SQL 模式比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695171/