2009-11-17 122 views
4

我有三個數據庫我的一個項目管理的連接字符串。我還有幾個需要管理的環境。所有開發人員工具箱,一臺開發機器和一個臨時盒子。所以如果我有3個開發人員和3個數據庫,這意味着需要管理11個連接字符串(因爲每個開發人員都有本地數據庫副本)。爲了幫助管理這些連接字符串,我有幾個解決方案配置設置。建議在配置文件

除了這一點,我們有幾個類庫,每個都有它自己的單元測試項目。其中幾個單元測試項目也必須指定測試期間要使用的連接字符串。

所以,如果我有一個單一的web.config文件,並與文件的app.config四個測試項目,我必須有這些連接字符串的5個人副本。

目前已經得到了比複製一個更好的方法/所有這些配置文件之間粘貼這些連接字符串。

沒有人有什麼建議?我研究了使用web.config和web部署項目進行的轉換,但這對開發/測試時間沒有幫助。

任何想法?

謝謝, 邁克

回答

0

我們通常使用多個web.config文件中,讓構建和部署過程整理出哪些文件是有關其環境。因此,我們的解決方案將爲本地開發人員PC配置web.config,然後配置web.dev.config,web.test.config和web.prod.config。它確實會導致跨配置文件的重複,但確實可以清楚地描述環境之間的區別。由於我們的prod版本相當罕見,因此我會手動檢查添加到web的任何設置.test.config在發佈之前也已在web.prod.config文件中結束。

+0

我不知道這將解決我的問題。 也許最好將連接字符串保存在app.config中,並直接將它們從 .dll.config中取出。至少這樣我就不必複製/粘貼任何連接字符串。 – devlife 2009-11-17 04:56:27

1

我所做的是要爲每個環境的獨立的配置文件的方式,通常是標準的應用程序或Web配置是本地連接字符串與命名有前置於到App或Web環境中的其他CONFIGS 。

I.E.

prod_Web.config

beta_App.config

您可以在解決方案中使用的部署選項在vsmdi,然後選擇環境從測試菜單測試。這個功能本身就是一顆寶石。

3

這可能只是一個部分解決方案,但您可以將configSource屬性添加到配置元素,該配置元素將允許您從不同文件中獲取特定部分。這可以用來隔離通用配置文件中的不同內容。

請參見下面的article和向下滾動到如何使用用戶配置文件的數據庫連接字符串部分

+0

這讓我有一半的路!該文章展示了一種處理每個開發人員機器上的連接字符串的好方法。 現在我只需要弄清楚在我的類庫管理連接字符串用於測試目的的最佳途徑。 – devlife 2009-11-17 05:15:18

2

這是我做的:

<add key="PRODSSERVERNAME.DataBaseEnvironment" value="PROD" /> 
<add key="STAGESERVERNAME.DataBaseEnvironment" value="STAGE" /> 
<add key="DEVSERVERNAME.DataBaseEnvironment" value="DEV" /> 

對於名稱,使用PC名稱。您可以通過從命令提示符運行主機名來找到它。

然後,您可以這樣做:

<add key="DB,DEV"   value="Data Source=[DEV STRING] /> 
<add key="DB,STAGE"   value="Data Source=[STAGE STRING] /> 
<add key="DB,PROD"   value="Data Source=[PROD STRING] /> 

然後你寫的函數:

protected string GetConnectionString() { 
    string machineName = String.Concat(System.Environment.MachineName, .DatabaseEnvironment"); 
    string environment = ConfigurationManager.AppSettings[machineName]; 
    string Key  = String.Concat("DB", ",", environment); 
    string value  = ConfigurationManager.AppSettings[ssoKey]; 

    return value; 
}