发布配置文件(或架构比较)不会评估 SQLCMD 变量

Publish Profile (or schema compare) will not evaluate SQLCMD variables

SQLCMD 变量替换已在我们的项目中工作多年,但在更新到 VS 16.5 后它停止工作了。

发布配置文件(或架构比较)不会评估 SQLCMD 变量。

生成的脚本总是包含任何使用 SQLCMD 变量并错误地更新目标数据库上的过程的文件。它使用变量名(例如($databasename))而不是替换值(即根本没有替换发生)

Advanced 下有一个选项...显示“不计算 SQLCMD 变量”。关闭或打开它都没有效果。

此缺陷之前曾被报告过 in the Visual Studio Community,但它似乎已被提前关闭,其他人表示它实际上并未得到修复。

我在 Visual Studio 社区页面中提出了另一个案例,该页面正在进行他们的分类过程,但是,我想知道这里是否有其他人遇到过同样的问题并找到了替代解决方案?

我在 Visual Studio 2019 年和 2022 年都遇到了这个问题。

我目前正在使用

对于遇到此问题的任何其他人,我们发现替代品正在为不同的项目工作,该项目针对同一服务器上的不同数据库。

这告诉我们,这可能与项目相关。在编译解决方案时,我们注意到我们有以下警告

Warning:  SQL71502: Procedure: [XXX].[YYY] contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects:.... 

尽管在数据库引用中将“禁止引用警告”设置为 false,但构建并未失败。

我们从导致我们出现问题的程序之一(例如 [$(MyDbName)].[Schema].[Table])中删除了包含 SQLCMD 变量的 table 引用,并重新编写了它 BY手。重要的是你输入它并使用智能感知 select 你引用的数据库 SQLCMD 变量。使用复制和粘贴并没有解决我们的问题!

结果 SQL 是相同的(Git 认为没有变化,也没有什么可签入的)但显然 visual studio 维护了某种类型的参考(也许是通过某些东西在 .vs 文件夹中??)。更奇怪的是,即使我们没有签入 .vs 文件夹,这也以同样的方式影响了所有用户。

无论如何 - HTH