2012-06-13 14 views
2

我是一個小型開發團隊的一員,我們正在從一個共享相同開發數據庫的模型轉移到一個我們都擁有自己的個人開發數據庫的模型。如何動態定製.net .config文件

因此,我們試圖找出如何管理Web和應用程序.config文件以適應各個數據庫。顯然,我們希望避免每個人都需要手動將連接字符串更改爲指向他們自己的數據庫的情況,然後記得在重新檢入之前將其更改回去!

我確定這是一個非常普遍的問題,它面臨着幾乎所有的開發團隊。儘管如此,我找不到解決這個問題的辦法。

我熟悉使用xdt語法的web.config轉換,雖然這有助於修改文件,但它並沒有(據我所知)提供了一種注入外部參數值的方法。例如,我們需要轉換來檢測當前用戶,並將.config中的數據庫名稱替換爲包含其用戶名的數據庫名稱。

那麼,如何在開發團隊中解決這個問題呢?

謝謝。

編輯:

抱歉,我錯過的信息相當重要的部分,其防止這些問題的答案從是可接受。作爲一家公司,我們都將遠程桌面和遠程桌面應用到我們的開發環境中。我們實際上擁有一臺(強大的)開發機器,所有開發人員可以同時使用和使用。因此,使用別名或修改主機文件等將同樣適用於所有用戶,而不是提供必要的個性化定製。 SQL實例已經是本地實例,它只是所有開發人員使用的機器上的本地實例。

回答

1

我可以建議兩種方法來做到這一點。

  1. 使用相同的別名爲數據庫服務器名稱,以便連接字符串將是相同的,你可以通過把下面一行到你的主機做這個文件:

    127.0.0.1 DBSERVER

  2. 將連接字符串放入外部文件並且不要將其添加到源代碼管理。對於登臺和發佈配置,您可以通過Web配置轉換添加所需的連接字符串。

在第二種情況下,你的web.config看起來就像這樣:

<connectionStrings configSource="connectionStrings.config"></connectionStrings> 

編輯: 凡connectionStrings.config文件放在同一個文件夾,但被添加到忽略源控制列表,以便每個開發人員都將擁有自己的此文件副本,而且他的更改不會影響其他開發人員。爲簡化操作,您可以創建一個可用作模板的connectionStrings.config.default文件,以便在新開發人員加入項目時,他將基於具有默認值的此文件創建自己的connectionStrings.config副本。

+0

謝謝,請參閱我的編輯,這解釋了爲什麼這不利於我們的情況。 – Martyn

+0

好的,我明白了。但你爲什麼不喜歡第二種方法呢?據我瞭解,雖然在同一臺計算機上工作,開發人員擁有自己的源代碼副本,不是嗎? –

+0

是的,但同樣的問題,每個開發者都必須定製源代碼來指向他們自己的單獨連接文件。該解決方案有效地將問題從web.config文件移動到另一個新文件。 - 也許我不理解這一點,你能否更詳細地解釋如何設置這些外部文件,以及如何讓源訪問它們。謝謝! – Martyn

0

一個選項可以使用命名連接字符串,並在machine.config而不是web.config中定義。

+0

謝謝,請看到我的編輯的問題這解釋了爲什麼修改machine.config在這種情況下無法提供幫助。 – Martyn

0

這個問題的常見解決方案是在每個用戶開發機器上都有開發數據庫,​​以便每個人都可以擁有相同的連接字符串。對於SQL Server將是這樣的:

connectionString="data source=.\SQLExpress;..." 

當你這樣做,你希望每個開發人員擁有最新的數據庫,所以你應該看看Visual Studio 2010的數據庫項目,這使得它可以很方便(SQL服務器只是)。

+0

謝謝,請參閱我的編輯,這解釋了爲什麼這不利於我們的情況。 – Martyn

0

我們使用的技術是在開發機器上標準化數據庫名稱,服務器名稱(無命名實例),用戶名和密碼。

因此,如果該產品代號爲航空,我們會使用

服務器=(當地);數據庫=航空; UID =航空;密碼=密碼

用於開發環境中的安全ISN」重要的但一致性是,並且這種技術避免檢查和打破其他人的app/web.configs。

+0

謝謝,請參閱我的編輯,以解釋爲什麼這種方法在我們的情況下沒有用。 – Martyn

0

儘管我們使用web.config轉換來定義使用的數據庫(本地開發,測試,發佈),但每個開發人員都可以根據需要使用本地SQL Server。我們通過設置SQL服務器別名,Web配置連接字符串是相同的,開發人員在他們的機器上設置別名。

例如,我們有所有的設置「tester1」在web.config中,然後開發商設置別名到他們的本地SQL服務器,這裏是圖像:

enter image description here

+0

謝謝,請參閱我的編輯,這解釋了爲什麼這對我們的情況沒有幫助。 – Martyn