我是第一次设置数据库项目,我正在尝试使用 Azure DevOps 进行构建/部署。我正在使用 Azure (windows-2019) 中托管的 MSBuild 任务进行构建。我正在使用在 SQL 服务器上运行的命令行任务从
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140
.
在使用 SqlPackage.exe 部署期间,我收到 master 和 msdb 数据库的错误:
No file was supplied for reference master.dacpac; deployment might fail. When C:\Jen_DacpacTest\Artifact\whatever.dacpac was created, the original referenced file was located C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS\MASTER.DACPAC.
Run Code Online (Sandbox Code Playgroud)
我认为对 master 和 msdb 的引用是在构建和部署时解决的(因为它是路径的变量),但似乎并非如此。它似乎在构建期间弄清楚 $(DacPacRootPath) 是什么,并对生成到 dacpac 中的 model.xml 文件中的引用进行“硬编码”。proj 文件中的引用如下所示:
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\master.dacpac">
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\master.dacpac</HintPath>
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
<DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
</ArtifactReference>
<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\msdb.dacpac">
<HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\msdb.dacpac</HintPath>
<SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
<DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
</ArtifactReference>
Run Code Online (Sandbox Code Playgroud)
如果 dacpac 被解压,那么它在 model.xml 文件中的样子如下:
<CustomData Category="Reference" …
Run Code Online (Sandbox Code Playgroud)