【问题标题】:Error: The reference to external elements from the source named 'master.dacpac' could not be resolved错误:无法解析来自名为“master.dacpac”的源对外部元素的引用
【发布时间】:2018-08-31 07:31:05
【问题描述】:

我正在 Windows 机器上使用 sqlpackage 构建数据库 dacpac。该项目包含对master.dacpac的引用

我将 dacpac 移动到 linux 机器(mssql-server-linux docker 映像)并恢复数据库。

deploy-database.sh

# publish dacpac using sqlpackage
./sqlpackage/sqlpackage /Action:Publish /sf:"/MyDb.dacpac" /tu:sa /tp:Password1 /tdn:MyDb /tsn:localhost

错误:

没有提供文件供参考 master.dacpac;部署可能会失败。创建包时,原始引用文件是 位于 C:$(windows 机器路径)\MASTER.DACPAC。初始化 部署(失败) 部署计划生成过程中发生错误。部署无法继续。错误 SQL0:对外部元素的引用来自 无法解析名为“master.dacpac”的源,因为没有 这样的源被加载。警告 SQL72025:没有为 参考master.dacpac;部署可能会失败。当包裹是 创建后,原始引用文件位于 C:$(windows machine 路径)\MASTER.DACPAC。

添加引用时出错。部署不能 继续。命令“/bin/sh -c sh /deploy-database.sh”返回一个 非零码:1

我曾尝试将master.dacpac 直接添加到项目中,并将其复制到 docker 映像中,但出现相同的错误。

如何在 linux 环境中恢复引用 master.dacpac 的 dapac?

【问题讨论】:

  • 即使您将master.dacpac 复制到与mydb.dacpac 相同的文件夹并使用/p:IncludeCompositeObjects=true 运行sqlpackage 仍然失败?

标签: sql-server docker dacpac sqlpackage


【解决方案1】:

我遇到了类似的问题,我的解决方案是将对我有用的 dacpac 文件重命名为大写(例如:MASTER.DACPAC),并将包含 dacpac 文件的目录设为工作目录。

【讨论】:

    【解决方案2】:

    我尝试直接将 master.dacpac 添加到项目中 将其复制到 docker 映像,但出现相同的错误。

    确保master.dacpac 文件位于当前工作目录中。由于您的MyDb.dacpac文件存在于根目录中,因此将master.dacpac文件复制到那里并在根目录的上下文中执行sqlpackage命令。

    下面的示例指定了对sqlpackage 的绝对引用(以防它不在您的路径中)和对您的用户 dacpac 的相对引用(尽管绝对引用也可以使用)。

    cd /
    /sqlpackage/sqlpackage /Action:Publish /sf:"MyDb.dacpac" /tu:sa /tp:Password1 /tdn:MyDb /tsn:localhost
    

    【讨论】:

    • 我不再直接处理这个了。如果有人可以确认这可以解决问题,我会接受作为答案。 @tgn12 如果这为您解决了问题,您可以在这里发表评论吗?
    • @EamonnMcEvoy,我确实对此进行了测试,并且数据库已成功部署。但是,如果您无法测试自己并想要独立验证,那也没关系。
    • 注意:对于我自己的项目,我必须根据错误输出将其他引用的文件重命名为全大写...例如我所在目录中的 MYFOO.DACPAC 和 MASTER.DACPAC使用。
    • @Tracker1 - 让文件名 MASTER.DACPAC 区分大小写是答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2017-03-22
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2020-07-09
    相关资源
    最近更新 更多