Развертывание проектов базы данных - не предоставлен файл для ссылки master.dacpac - PullRequest
2 голосов
/ 25 марта 2020

Я впервые настраиваю проекты баз данных и пытаюсь собрать / развернуть, используя Azure DevOps. Для сборки я использую задачу MSBuild, размещенную в Azure (windows -2019). Я использую задачу командной строки, запущенную на сервере SQL, чтобы выполнить SQLPackage.exe из рабочего каталога C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140.

. Я получаю ошибки для баз данных master и msdb во время развертывания с помощью SqlPackage. .exe:

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) во время сборки и «жестко кодирует» ссылки в модели. xml файл, сгенерированный в dacpa c. Ссылки выглядят так в файле 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>

Вот как это выглядит в модели. xml файл, если dacpa c распакован:

<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 MSBuild (и задача сборки Visual Studio), размещенная в Azure, будет ссылаться на master-файл и dacpac msdb из папки Visual Studio Enterprise, но в SQL Сервер, на котором запускается SqlPackage.exe для развертывания, эти файлы находятся в папке BuildTools вместо Enterprise. (И я не думаю, что мне нужно устанавливать VS Enterprise edition на мой SQL сервер, чтобы заставить это работать?)

В Azure: C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\\**ENTERPRISE**\\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\EXTENSIONS\SQLSERVER\140\SQLSCHEMAS

Вкл. сервер SQL: C:\Program Files (x86)\Microsoft Visual Studio\2019\\**BuildTools**\\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SQLSchemas

Кажется странным, что путь к этим файлам на сервере сборки должен точно соответствовать тому, что находится на сервере sql. Я думал, что будет немного больше магов c, чтобы найти эти ссылки на dacpa c, поскольку, насколько я понимаю, вы не должны вручную добавлять их в свой проект и перетаскивать их повсюду.

1 Ответ

2 голосов
/ 26 марта 2020

Развертывание проектов базы данных - не предоставлен файл для ссылки master.dacpa c

Это типичная проблема SSDT. Путь к этим файлам на сервере сборки не является основной причиной вашей проблемы.

Пожалуйста, проверьте Не предоставлен файл для справки AB C .dacpac; может произойти сбой развертывания и Ошибка: не удалось разрешить ссылку на внешние элементы из источника с именем 'master.dacpa c' .

Попробуйте скопировать master.dacpac в та же папка, в которой находится ваш xx.dacpac. (Это можно сделать с помощью команды copy/xcopy в cmd). Убедитесь, что рабочий каталог вашей задачи CMD находится в той же папке. Надеюсь, это поможет:)

...