Visual Studio Data Projects使用兩個部署階段。
通過構建數據庫項目創建的部署文件實際上只是一組元數據,它描述了數據庫所需的最終狀態,但不知道要在何處部署或者它是否是新數據庫,或者現有數據庫。
第二部分實際上是針對特定數據庫(現有的或新的)執行部署包。爲此,Visual Studio必須針對數據庫和部署包運行diff,並確定需要應用哪些更改,並生成應用這些更改所需的腳本。
所以你的問題是,如果你在你的MSI中包含第一部分,你需要在最終用戶的機器上運行一些東西,將這些更改應用到未知數據庫中的未知數據庫中,他們真的把它們運送給Visual Studio。
幸運的是,MS也包含一個命令行(VSDBCMD.exe),它允許您採用該單個部署軟件包並使用它來將更改應用到任何數據庫。這個工具將和Visual Studio做同樣的區別,並生成創建/升級數據庫所需的SQL腳本(如果你願意,可以根據命令行參數實際運行腳本)。有關如何從命令行調用它的信息,請參閱http://msdn.microsoft.com/en-us/library/dd193283.aspx。因此,我看到你在你的應用程序中運行該命令行工具(只要確保仔細檢查重新分發許可證以確保它沒問題),並在你的MSI(或其他實用程序)中進行自定義操作即可執行它以應用數據庫更改。還要檢查命令行工具的依賴關係,我知道它需要SQL SMO對象,SQL Native Client以及其他一些東西。您需要確保MSI將這些作爲先決條件。
感謝您的回覆。我們已經創建了一個實用程序來創建和更新客戶服務器上的數據庫。我們不得不在幾年前創建。現在,我們正試圖弄清楚如何使用數據庫項目以及我們需要對我們的實用程序進行的操作。我曾看過VSDBCMD,但它並未在REDIST.TXT中列出,因此我們無法重新分配它。雖然有博客文章聲稱它可以重新分發,也許我正在閱讀錯誤的許可證。 – 2012-01-09 16:49:12
有趣的,顯然它確實在VS 2008中提到過:http://blogs.msdn.com/b/gertd/archive/2008/08/22/redist.aspx,但我沒有在VS中的任何地方看到相應的信息2010。 – 2012-01-09 17:02:47