SSDT 更改目标平台有问题

SSDT Changing Target Platforms problematic

我有一个包含 3 个数据项目的 SSDT 项目,其中项目 A、项目 AB 和项目 ABC 其中:-

我正在本地部署数据库项目 ABC 到 2014,然后(在开发之后)将其部署到 Azure。

一切正常,直到我尝试更改 Target 平台。大多数时候,我只需更改 ABC 的目标平台并部署即可部署到 Azure,但偶尔我发现我还需要更改项目 A and/or 项目 AB 的目标平台以生成脚本针对 2014 年的数据库。

这样做之后,当我尝试将其更改回 "Microsoft Azure SQL Database V12" 时,当我尝试生成脚本时失败,并在数据工具操作中显示消息:-

A project which specifies SQL Server 2014 as the target platform cannot be published to Microsoft Azure SQL Database v12

但是,我肯定将所有目标平台都设置为 Microsoft Azure SQL Database v12。我还可以在项目 AB 上看到对项目 A 的引用有警告图标

如果我尝试删除数据库引用并重新添加引用(同一个数据库项目引用),成功添加引用后我会看到一个对话框...

什么输出目录?!我试过删除 bin 和 obj 文件夹,但没有成功。

我发现的唯一解决方法是擦除所有内容(不还原未提交的更改),在从源代码管理中提取所有内容后,我可以再次发布并生成针对 azure 的脚本。所以我一定是漏掉了什么。

有没有人遇到过这些问题并找到了更简单的解决方法?

我希望将开发和发布分成两个独立的部分。

在 ssdt 中针对一个或另一个开发然后使用 sqlpackage 使用 dacpac 进行部署,我为 2016 和 azure v12 这样做我认为旧版本可能需要您设置 AllowIncompatibleVersions。

如果您不必更改版本,那么您就不会 运行 陷入这些问题,也不必重建所有参考文献。

埃德

我发现解决此问题的方法是始终确保在编译项目时将所有目标平台设置为相同的目标平台,在我的例子中是 Azure SQL Database V12。如果您希望部署到本地 SQL 服务器数据库,请确保所有引用的项目都已针对同一平台成功构建(即对我来说是 Azure SQL DB V12),切换项目的目标平台您正在部署到 SQL Server 2014(或您的本地数据库的任何版本)然后部署,然后在编译任何新更改之前再次将其切换回来。

我发现您最终可能会遇到一些问题,例如拒绝部署或引用数据库项目中的架构更改未部署,除非您将所有目标平台设置为同一平台进行编译。例如上面的例子,如果项目ABC的目标平台与项目A不同,你可以在项目A中进行更改,编译部署ABC成功,但是在项目A中所做的none的更改将被部署.

编辑/更新: 我发现如果您要部署到 SQL Server 2017(又名 V14.0. * ) 来自 VS 2017。您可以将针对 azure 的项目部署到本地 SQL Server 2017 实例,而不会出现此问题中描述的问题。我没有尝试部署到其他版本的 SQL 服务器,所以我不知道它是对 SQL 服务器的更改还是对 Visual Studio 的更改,无论如何它现在正在工作无需任何技巧。