2016-05-27 67 views
0

我有3個數據項目SSDT項目中,項目A,項目AB和項目ABC其中: -SSDT更改目標平臺問題

  • 項目AB有一個數據庫參考投射
  • 項目ABC有項目AB和項目A的數據庫引用

我正在部署數據庫項目ABC本地到2014年,然後(開發之後)將其部署到Azure。

一切都好,直到我嘗試更改目標平臺。大多數情況下,我可以通過僅更改目標平臺進行ABC部署來部署Azure,但有時候我還需要更改Project A和/或Project AB的目標平臺,以便爲其生成腳本2014數據庫。

這樣做,當我試圖將其改回爲「微軟Azure SQL數據庫V12」當我試圖生成失敗,並在數據工具操作的消息的腳本後: -

一個項目,指定作爲目標平臺 的SQL Server 2014不能被髮布到微軟的Azure SQL數據庫V12

不過,我肯定都設置爲微軟Azure SQL數據庫V12的目標平臺。我也可以在項目AB上看到對項目A的引用有警告圖標enter image description here

如果我試圖刪除數據庫參考,並重新添加引用(同一個數據庫項目的參考),成功後加入我得到一個對話框參考...

enter image description here

什麼輸出目錄?!我試過刪除bin和obj文件夾,但沒有成功。

我發現的唯一工作是擦除所有東西(不會還原未提交的更改),從源代碼控制中拉出所有內容後,我可以再次發佈並生成腳本。所以我必須錯過一些東西。

有沒有人遇到這些問題,並找到一個更簡單的方法來解決它們?

+0

看起來像一個惱人的bug。如果你想用FileMon找出這個虛構的輸出目錄 –

+0

你是如何生成你的部署腳本的? –

+0

我使用發佈功能.publish.xml文件 – Mick

回答

0

我已經找到了這個問題的解決辦法是,當你編譯所有的目標平臺設置爲相同的目標平臺的項目,在我的情況Azure的SQL數據庫V12始終保證。如果您希望部署到本地SQL Server數據庫,請確保所有引用的項目都已針對相同平臺成功構建(即對於我而言,Azure SQL DB V12),將您部署到SQL Server 2014的目標平臺(或者您本地數據庫的任何版本)切換爲部署,然後在編譯任何新更改之前將其切換回來。

我發現你可以用問題,最終如事拒絕部署或除非你設置爲同一個平臺上所有目標平臺上編譯沒有部署引用的數據庫項目的架構更改。例如,如果項目ABC的目標平臺與項目A不同,您可以在項目A中進行更改,成功編譯和部署ABC,但不會部署項目A中所做的任何更改。

編輯/ UPDATE:我發現,從2017年VS這項工作,如果你要部署到SQL Server 2017年左右就不再需要,可以部署一個項目瞄準蔚藍(又名V14.0。*)到本地SQL Server 2017實例,而不存在此問題中描述的問題。我還沒有嘗試部署到其他版本的SQL Server,所以我不知道它是否是對SQL Server的更改或對Visual Studio的更改,無論如何它現在可以工作而不需要任何技巧。

+0

有沒有人找到一種方法來做到這一點,而不是硬編碼項目文件作爲一個msbuild參數? –

+0

@JasonMeckley我已經編輯了我的答案,並對此問題進行了更新。您可能會發現升級可以解決您的問題,而無需修改構建腳本或項目文件 – Mick

1

我會如此將開發和發佈分成兩個獨立的東西。

在ssdt中針對其中一個或另一個進行開發,然後使用sqlpackage使用dacpac進行部署,我在2016和azure v12上執行此操作我認爲舊版本可能需要您設置AllowIncompatibleVersions。

如果您不需要更改版本,那麼您將不會遇到這些問題,也不必重新生成所有的引用。

埃德