【发布时间】:2020-07-06 10:59:15
【问题描述】:
我是第一次设置数据库项目,我正在尝试使用 Azure DevOps 构建/部署。我正在使用 Azure (windows-2019) 中托管的 MSBuild 任务进行构建。我正在使用 SQL 服务器上运行的命令行任务从工作目录执行 SQLPackage.exe
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.
我认为对 master 和 msdb 的引用在构建和部署时都已解决(因为它是路径的变量),但似乎并非如此。它似乎在构建过程中弄清楚 $(DacPacRootPath) 是什么,并将生成的 model.xml 文件中的引用“硬编码”到 dacpac 中。 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>
如果 dacpac 被解压,下面是 model.xml 文件中的样子:
<CustomData Category="Reference" Type="SqlSchema">
<Metadata Name="FileName" Value="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS\MASTER.DACPAC" />
<Metadata Name="LogicalName" Value="master.dacpac" />
<Metadata Name="ExternalParts" Value="[master]" />
<Metadata Name="SuppressMissingDependenciesErrors" Value="False" />
</CustomData>
<CustomData Category="Reference" Type="SqlSchema">
<Metadata Name="FileName" Value="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\ENTERPRISE\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS\MSDB.DACPAC" />
<Metadata Name="LogicalName" Value="msdb.dacpac" />
<Metadata Name="ExternalParts" Value="[msdb]" />
<Metadata Name="SuppressMissingDependenciesErrors" Value="False" />
</CustomData>
所以我想知道这应该如何工作,因为托管在 Azure 中的 Azure MSBuild 任务(和 Visual Studio 构建任务)将从 Visual Studio Enterprise 文件夹中引用 master 和 msdb dacpacs,但在 SQL Server 上运行 SqlPackage.exe 进行部署的位置,这些文件位于 BuildTools 文件夹而不是 Enterprise 中。 (而且我真的不认为我应该在我的 SQL 服务器上安装 VS 企业版才能让它工作?)
在 Azure 中:
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\\**ENTERPRISE**\\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS
在 SQL Server 上:
C:\Program Files (x86)\Microsoft Visual Studio\2019\\**BuildTools**\\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SQLSchemas
构建服务器上这些文件的路径必须与 sql 服务器上的路径完全匹配,这似乎很奇怪。我认为找到这些 dacpac 引用会更神奇,因为据我了解,您不应该手动将它们添加到项目中并将它们拖到任何地方。
【问题讨论】:
标签: azure-devops sql-server-data-tools database-project