SSDT 数据库项目中对系统数据库的引用变得重复

Posted

技术标签:

【中文标题】SSDT 数据库项目中对系统数据库的引用变得重复【英文标题】:Reference to system databases becomes duplicated in SSDT database project 【发布时间】:2020-09-11 15:06:41 【问题描述】:

在一个包含大量项目和引用的大型 SSDT 数据库解决方案中,我正在将我的项目中的引用添加到系统数据库(master、msdb),它运行良好,并且构建成功。

一段时间后,我开始收到有关不正确引用的错误。我去参考部分看到这个:https://pasteboard.co/JqzDSDh.png

我尝试删除第二个引用并且错误消失了,但是这个问题又出现了,我再次看到两个相同的引用。

谢谢!

【问题讨论】:

请编辑您的问题并添加嵌入图片,而不是添加链接。 【参考方案1】:

您的project.sqlproj 文件很可能有问题。尝试在那里搜索master.dacpac 关键字并确保没有多个条目。确保 dacpac 路径没有完全硬编码,而是在那里使用 $(DacPacRootPath) 变量。

这是一个参考应该是什么样子的示例(确保您在路径中定义了正确的 SQL 版本。我的版本是 140)。

    <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>

如果这没有帮助,请尝试运行“清洁解决方案”,然后删除所有 *.jfm 文件和 *.dbmdl 文件、binobj 文件夹并重新构建项目。

【讨论】:

谢谢!我需要在任何地方为 $(DacPacRootPath) 设置值吗?我相信修改 XML 是唯一的方法让路径里面有变量,对吧? 它是内置变量,你不需要在任何地方设置它

以上是关于SSDT 数据库项目中对系统数据库的引用变得重复的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SSDT (10.3.21208.0)/数据层项目 (MSVS 2010) 和项目与引用数据库项目之间的“共享”/复制证书

SSDT 很长时间加载项目和未解决的参考

dotConnect for Oracle v9.1发布,新增SSDT-BI项目模板

带有 dacpac 参考的 SSDT 未解析参考

修复或避免在 SSDT 引用 Azure 托管实例中的主数据库时出现 SQL71501 和 SQL71561 构建错误?

在 SQL Server 2012 SSDT 解决方案中引用 CLR 项目