使用SqlPackage发布dacpac时覆盖DefaultDataPath和DefaultLogPath变量

时间:2015-03-05 15:35:52

标签: dacpac sqlpackage

环境:

  1. 在Visual Studio 2013中使用SQL Server数据库工具,更新4以创建用于发布数据库的DacPac。
  2. 使用TFS构建来构建和删除数据库项目。
  3. 使用SqlPackage版本将dacpac发布到SQL Server 2012。
  4. 使用SqlPackage操作“发布”,使用以下变量根据目标数据库的默认值生成部署脚本:

    :setvar DefaultDataPath“H:\ YourServerDefault”
    :setvar DefaultLogPath“H:\ YourServerDefault”

    我想覆盖这些位置,以便在我们配置了一些外部加密的特定目录对中着陆。

    我试图以两种方式覆盖这些SQLCMD值:

    1. 在命令行上覆盖:

      SQLPackage / Action:Publish /SourceFile:./Db.dacpac /Profile:./MyProfile.publish.xml / Variables:DefaultDataPath = H:\ MyNewLocation

    2. 在发布资料中添加覆盖(下面的代码段):

    3. <&的ItemGroup GT;
          < SqlCmdVariable Include =“DefaultDataPath”>
            <值及GT; H:\ YourServerDefault< /值及GT;
          < / SqlCmdVariable>
        < /&的ItemGroup GT;

      虽然我可以使用任何一种技术来覆盖我自己定义的SQLCMD变量,但忽略了DefaultDataPath和DefaultLogPath之类的内置函数。

      使用SqlPackage发布时有没有办法覆盖这些值?

1 个答案:

答案 0 :(得分:3)

SqlPackage中没有内置支持,但您可以使用部署贡献者执行此操作。看一下GitHub上的DbLocationModifier示例,它可以解决这个问题。要实际使用它,您需要:

  • 从Github下载代码
  • 向项目添加签名密钥
  • 安装到correct extensions directory,或将其放在与SqlPackage本身相同的文件夹中。
  • 将附加参数传递给SqlPackage,指定您的参与者名称和参数 - 请参阅test code了解如何通过API执行此操作,SqlPackage调用基本相同。

有关贡献者以及如何使用它们的更多信息,您可以阅读我撰写的tutorial或阅读MSDN上的walkthroughs

披露:我在SQL Server工具团队工作。