托管 VS2017 代理版本 master.dacpac 不存在

Hosted VS2017 agent build master.dacpac does not exist

我使用 VS2017 Professional 创建的解决方案包含一个引用 master 数据库的 SQL 服务器数据库项目。使用托管 VS2017 代理在 Visual Studio Team Services 中构建我的解决方案时,出现以下错误:

2017-07-14T12:44:17.8387743Z ##[error]C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(559,5): Error SQL72027: File "C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer0\SqlSchemas\master.dacpac" does not exist. 2017-07-14T12:44:17.8397816Z C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(559,5): Build error SQL72027: File "C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer0\SqlSchemas\master.dacpac" does not exist. [d:\a\s\Main\ItAsset.Database\ItAsset.Database.sqlproj]

我该如何解决这个问题并让我的解决方案在 VSTS 中构建?

它使用了 Hosted VS2017 代理中不存在的绝对路径。 (专业版 对比 企业版)。您可以检查项目文件(通过nodepad打开sqlproj文件)

您可以将 master.dacpac 复制到您的项目文件夹并将其包含到项目中,然后添加对此文件的引用。

这是 Visual Studio 2017 年 SSDT 中的一个错误。

解决方法是手动编辑项目文件,用 $(DacPacRootPath) 变量替换完整路径。或者,您可以在 Visual Studio 2015 年使用 SSDT。

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

8/12/2019 更新 - 此错误已在 Visual Studio 2019 和 Visual Studio 2017 版本 15.9.13 中修复。看这里 - https://developercommunity.visualstudio.com/content/problem/124214/visual-studio-2017-ssdt-adds-hardcoded-mmsdb-andor.html

我只是在多开发人员的情况下遇到了这个问题。它似乎发生在 VS2017 SSDT 项目中,其中签入代码的开发人员最初将 Visual Studio 安装在与您不同的路径中,或者 Visual Studio 的另一个实例。例如,如果开发人员 A 安装到默认 C:\ 但开发人员 B 安装他的 VS2017 到 E:\ 驱动器,谁创建对 Master 的引用将起作用,另一个将找不到 dacpac 文件。

查看 .sqlproj 文件,您可能会找到对 Master 数据库的引用:

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

注意:<HintPath> 是正确的,但 Include=" 是硬编码路径。似乎没有按照通常应该遵循的提示路径进行操作。要解决您的问题,请尝试将 HintPath 元素的内容复制到 Include 属性。保持 HintPath 不变。

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

尝试在 VS2019 中打开在 VS2017 中创建的 SSDT,需要更改

发件人:

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

收件人:

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

注意:企业 Visual Studio

我们有不同版本 Visual Studio 的开发机器。我用一个条件来指定 HintPath

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