我有一个包含3个数据项目的SSDT项目,项目A,项目AB和项目ABC,其中: -
我正在将数据库项目ABC本地部署到2014年,然后(在开发之后)将其部署到Azure。
一切顺利,直到我尝试更改目标平台。大部分时间我只需更改目标平台即可部署到azure并进行部署,但偶尔我发现我还需要更改Project A和/或Project AB的目标平台,以使其生成针对a的脚本2014年数据库。
在我尝试生成脚本时尝试将其更改回“Microsoft Azure SQL数据库V12”时,它在数据工具操作中失败并显示消息: -
将SQL Server 2014指定为目标平台的项目 无法发布到Microsoft Azure SQL数据库v12
但是,我确实将所有目标平台都设置为Microsoft Azure SQL Database v12。我还可以在项目AB上看到对项目A的引用具有警告图标。
如果我尝试删除数据库引用并重新添加引用(相同的数据库项目引用),则在成功添加引用后,我会得到一个对话框...
什么输出目录?!我试过删除bin和obj文件夹,没有成功。
我发现的唯一工作就是擦除所有内容(不恢复未提交的更改),在从源代码控制中提取所有内容后,我可以再次发布并生成针对azure的脚本。所以我一定错过了什么。
是否有人遇到过这些问题,并找到了解决这些问题的简便方法?
答案 0 :(得分:2)
我将把开发和发布分成两个独立的东西。
开发ssdt对一个或另一个然后使用sqlpackage使用dacpac进行部署,我这样做2016年和azure v12我认为旧版本可能要求你设置AllowIncompatibleVersions。
如果您不需要更改版本,那么您将不会遇到这些问题,也不必重建所有引用。
版
答案 1 :(得分:0)
我发现解决此问题的方法是始终确保在编译项目时,所有目标平台都设置为相同的目标平台,在我的案例中是Azure SQL Database V12。如果您希望部署到本地SQL Server数据库,在确保已针对同一平台(即对于Azure Azure SQL DB V12)成功构建所有引用的项目之后,切换项目的目标平台,并将其部署到SQL然后部署Server 2014(或本地数据库的任何版本),然后在编译任何新更改之前再将其切换回来。
我发现除非您将所有目标平台设置为同一平台进行编译,否则您最终会遇到诸如拒绝部署或未引用的引用数据库项目中的架构更改之类的问题。例如,在上面的示例中,如果项目ABC的目标平台与项目A不同,您可以在项目A中进行更改,成功编译和部署ABC,但不会部署项目A中所做的任何更改。
编辑/更新:如果您从VS 2017部署到SQL Server 2017(又名V14.0。*),我发现不再需要这项工作您可以将针对azure的项目部署到本地SQL Server 2017实例,而不会出现此问题中描述的问题。我还没有尝试过部署到其他版本的SQL Server,所以我不知道它是对SQL Server的更改还是对Visual Studio的更改,无论如何它现在都在工作不需要任何技巧。