sql - 如何将连接字符串作为参数发送到 MsBuild 以执行 SQL 模式比较?

标签 sql msbuild sql-server-data-tools

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 的属性.

引用文献:
  • MSBuild Special Characters
  • How to: Escape Special Characters in MSBuild
  • 关于sql - 如何将连接字符串作为参数发送到 MsBuild 以执行 SQL 模式比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695171/

    相关文章:

    mysql - select语句中的sql设置和使用变量

    MySQL:仅按连接的行分组

    sql - 如果表不存在,是否可以构建 SQL 查询以自动创建表?

    visual-studio - VSIX 安装程序 - 'Microsoft Analysis Services Projects' 安装失败

    sql-server - SSDT 和 TFS : compare SQL Server database not working

    mysql - 多对多关系sql

    msbuild - 如何从 msbuild 项目文件本身中使用不同的参数调用相同的 msbuild 目标两次

    visual-studio - 为什么每个用户都存储 Visual Studio 项目的命令行设置?是否可以 checkin (和共享).user 设置文件?

    Azure 云服务和 AfterBuild 目标访问被拒绝

    sql-server - 避免系统版本化表中的架构不匹配