数据库项目部署-没有提供文件供参考master.dacpac

问题描述 投票:2回答:1

我是第一次设置数据库项目,并且正在尝试使用Azure DevOps进行构建/部署。我正在使用Azure(Windows-2019)中托管的MSBuild任务进行构建。我正在使用在SQL Server上运行的命令行任务来从以下目录的工作目录执行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)在构建过程中是什么,并对生成到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>

如果打开了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 Enterprise版才能使其正常工作吗?)

在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 database-project
1个回答
0
投票

数据库项目部署-未提供文件供参考master.dacpac

这是典型的SSDT问题。这些文件在构建服务器上的路径不是造成问题的主要原因。

请检查No file was supplied for reference ABC.dacpac; deployment might failError: The reference to external elements from the source named 'master.dacpac' could not be resolved

尝试将master.dacpac复制到xx.dacpac所在的文件夹。 (您可以通过使用cmd中的copy/xcopy命令来执行此操作),并确保CMD任务的工作目录位于同一文件夹中。希望对您有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.