2010-02-14 61 views
5

我有一個簡單的WPF應用程序,它使用ClickOnce來處理安裝。在此應用程序內是一個緊湊的數據庫通過測試,我發現當我發佈一個新版本時,這個數據庫將被覆蓋,這不是我想要的。無論如何,我可以精確控制哪些文件被更新?我假定ClickOnce只是簡單地檢查數據庫文件的散列,並確定它已經改變並且更新了。當涉及壓縮數據庫時,ClickOnce安裝程序如何處理更新?

作爲一種解決方法,我已經從發佈的應用程序中包含的文件中刪除數據庫,以便在更新之後原始保留在客戶端計算機上。

不是一個很好的解決方案,我知道

感謝,

+0

數據庫導致哈希值發生變化的是什麼?你認爲你會*希望*將來推出新版本的數據庫嗎? – codeConcussion 2010-02-15 14:18:56

+0

真的不應該有任何改變,據我可以看到,除了創建/修改時間戳或許。我可能想在某個時候更新數據庫,但是現在我想Im在Im發佈的版本中的數據庫與原始版本有不同的散列,因此clickonce每次都要覆蓋,這意味着用戶會丟失數據。 – Sergio 2010-02-15 14:27:50

回答

5

的ClickOnce部署隔離的應用程序文件「包含」或「數據文件」。您可以通過轉至項目「屬性」頁面,「發佈」選項卡,然後單擊「應用程序文件...」按鈕來指定Visual Studio中每個文件的內容。然後,您可以將.sdf文件設置爲「發佈狀態」列下的「數據文件」。

隨着ClickOnce應用程序下載的數據文件將被放置在每個新版本的單獨目錄中。

這個想法是,在第一次運行新的應用程序版本時,您將從舊版本的數據文件中檢索所有用戶的私有數據,並將該數據合併到新數據文件中版。

我想你會在Accessing Local and Remote Data in ClickOnce Applications找到你需要的信息。具體來說,請查看「ClickOnce數據目錄」和「數據目錄和應用程序版本」部分。

要訪問位於您的數據目錄中的SQL Server CE數據庫,使用類似於下面的連接字符串:

<add 
    name="MyApplication.Properties.Settings.LocalCacheConnectionString" 
    connectionString="Data Source=|DataDirectory|\LocalCache.sdf" 
    providerName="Microsoft.SqlServerCe.Client.3.5" /> 

的 「| DataDirectory目錄|」是SQL CE和SQL Express支持的特殊語法,並在運行時解析到適當的目錄。

+0

我的以前版本的MDF文件如何看起來有新版本的「修改日期」?你認爲以前的版本數據目錄有可能被新的數據文件覆蓋嗎? – 2013-05-30 04:56:51

2

如果你在以上打開 SQLCE數據庫包含在你的項目中,它會改變數據庫的時間戳,ClickOnce會部署它並把舊版本放在\ pre子文件夾下。

您可能需要考慮this method來處理此問題。那麼如果你不小心部署了一個新版本的數據庫,並沒有意識到它,那麼你就沒有了。如果您故意進行更改,則可以使用SQL查詢更改當前數據庫的數據庫結構,並在需要時從部署到數據目錄的新副本中提取數據(您將忽略)。

RobinDotNet

相關問題