Error: The reference to external elements from the

2020-07-06 09:40发布

问题:

I am building a database dacpac using sqlpackage on a windows machine. The project contains a reference to master.dacpac

I take the move the dacpac to a linux machine (mssql-server-linux docker image) and restore the database.

deploy-database.sh

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

Error:

No file was supplied for reference master.dacpac; deployment might fail. When package was created, the original referenced file was located C:$(windows machine path)\MASTER.DACPAC. Initializing deployment (Failed) An error occurred during deployment plan generation. Deployment cannot continue. Error SQL0: The reference to external elements from the source named 'master.dacpac' could not be resolved, because no such source is loaded. Warning SQL72025: No file was supplied for reference master.dacpac; deployment might fail. When package was created, the original referenced file was located C:$(windows machine path)\MASTER.DACPAC.

An error occurred while adding references. Deployment cannot continue. The command '/bin/sh -c sh /deploy-database.sh' returned a non-zero code: 1

I have tried adding master.dacpac to the project directly and also copying it to the docker image but the same error occurs.

How can I restore a dapac in a linux environment that has a reference to master.dacpac?

回答1:

I had a similar issue, my solution was to rename the dacpac files UPPERCASE, (ex: MASTER.DACPAC) which worked for me, as well as making the directory with the dacpac files the working directory.



回答2:

I have tried adding master.dacpac to the project directly and also copying it to the docker image but the same error occurs.

Make sure master.dacpac file is in the current working directory. Since your MyDb.dacpac file exists in the root directory, copy the master.dacpac file there and execute the sqlpackage command in the context of the root directory.

The example below specifies an absolute reference to sqlpackage (in case it's not already in your path) and a relative reference to your user dacpac (although an absolute reference will work too).

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