Размещенный агент VS2017, сборка master.dacpac не существует

Мое решение, созданное с помощью VS2017 Professional, содержит проект базы данных SQL Server, который ссылается на основную базу данных. При использовании агента Hosted VS2017 для построения моего решения в Visual Studio Team Services я получаю следующие ошибки:

2017-07-14T12: 44: 17.8387743Z ## [ошибка]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(559,5): Ошибка SQL72027: файл "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\110\SqlSchemas\master.dacpac"не существует. 2017-07-14T12:44:17.8397816Z C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(559,5): ошибка сборки SQL72027: файл "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ Extensions \ Microsoft \ SQLDB \ Extensions \ SqlServer \ 110 \ SqlSchemas \ master.dacpac" не существует. [D: \ а \3\s\ Главная \ItAsset.Database\ItAsset.Database.sqlproj]

Как я могу это исправить и получить мое решение для сборки в VSTS?

5 ответов

Решение

Он использует абсолютный путь, который не существует в агенте Hosted VS2017. (Профессионал против Предприятия). Вы можете проверить файл проекта (открыть файл sqlproj через нодпад)

Вы можете скопировать master.dacpac в папку вашего проекта и включить его в проект, а затем добавить ссылку на этот файл.

Я только что понял это в ситуации с несколькими разработчиками. Похоже, что это происходит в проектах SSDT VS2017, в которых разработчик, зарегистрировавший код, изначально установил Visual Studio по другому пути, чем вы или другой экземпляр Visual Studio. Например, если разработчик A установил настройки по умолчанию на C:\, но разработчик B установил свой VS2017 на диск E:\, тот, кто создает ссылку на Master, будет работать, другой не найдет файл dacpac.

Глядя в файл.sqlproj, вы, вероятно, найдете следующую ссылку на базу данных Master:

 <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
  <HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac</HintPath>

Обратите внимание <HintPath> правильно, но Include=" это жестко закодированный путь Кажется, что путь подсказки не следует, как обычно. Чтобы устранить проблему, попробуйте скопировать содержимое элемента HintPath в атрибут Include. Оставьте HintPath как есть.

<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">

Это ошибка в SSDT для Visual Studio 2017.

Обходной путь - вручную отредактировать файл (ы) проекта, заменив полный путь переменной $(DacPacRootPath). Или вы можете использовать SSDT для Visual Studio 2015.

Об ошибке сообщалось дважды на сайте Microsoft Connect: https://connect.microsoft.com/SQLServer/Feedback/Details/3141348

И вот здесь: https://connect.microsoft.com/SQLServer/Feedback/Details/3133716

Обратите внимание, что сайт Connect был списан. Пожалуйста, проголосуйте за этот вопрос на UserVoice здесь:

https://feedback.azure.com/forums/908035-sql-server/suggestions/32897047-visual-studio-2017-ssdt-adds-hardcoded-master-dacp

У нас были машины для разработки с разными версиями Visual Studio. Я использовал условие для указания HintPath

        <Choose>
      <When Condition="Exists('C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac')">
          <ItemGroup>
            <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
              <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac</HintPath>
              <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
              <DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
            </ArtifactReference>
            <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac">
              <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac</HintPath>
              <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
              <DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
            </ArtifactReference>
          </ItemGroup>
      </When>
      <Otherwise>
          <ItemGroup>
            <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
              <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac</HintPath>
              <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
              <DatabaseVariableLiteralValue>master</DatabaseVariableLiteralValue>
            </ArtifactReference>
            <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac">
              <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\msdb.dacpac</HintPath>
              <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
              <DatabaseVariableLiteralValue>msdb</DatabaseVariableLiteralValue>
            </ArtifactReference>
          </ItemGroup>
      </Otherwise>
  </Choose>

Попытка открыть SSDT в VS2019, который был создан в VS2017, требует изменения

От:

<ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">

Для того, чтобы:

<ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SQLSchemas\master.dacpac">

ПРИМЕЧАНИЕ: Enterprise Visual Studio

Другие вопросы по тегам