2009-11-07 163 views
1

在我的生產環境中,我在同一臺計算機上安裝了多個Web應用程序。這些應用程序訪問各種Web服務和兩個SQL Server數據庫,這意味着我的web.config文件非常大且充滿了細節。除此之外,我還擁有使用相同Web服務並訪問不同數據庫的Windows服務,並且我還擁有大量的具有大量細節的app.config文件。整個解決方案使用.NET 3.5(C#)開發。多個應用程序共享相同的配置文件

當我的四個開發團隊中的一個想要部署解決方案的某個部分的新版本並需要更改所有配置文件時,我的問題就開始了。由於我的QA環境與生產環境有不同的機器名稱,因此我無法手動更改每個配置文件的簡單副本。而且,無論我的同事進行多少次檢查(即使使用檢查列表),某些配置也保持不變,並且解決方案的某些部分停止。

有沒有辦法爲所有應用程序創建一個獨特的配置文件?或者,至少將數據庫連接字符串和Web服務URL集中到一個文件中供所有應用程序使用?

PS:因爲他們是屬於我的客戶:(

回答

1

這是另一個想法(實際上我們如何解決我們的配置問題)。也許這更符合你的需求。

我們的配置文件相當大,但唯一真正改變的是配置字符串。

我們有一個包含特定配置字符串(開發數據庫,​​構建數據庫,QA數據庫)的每個配置的文件。這些文件看起來是這樣的:

<templates> 
    <template key="db" value="development server connection string"/> 
    <template .../> 
</templates> 

這些文件被命名爲環境後,他們在(devel.xml, build.xml, qa.xml

使用在配置文件中的字符串由佔位符代替連接(${db})。

我們爲每個環境構建配置(devel,build,qa)。構建這樣的配置時,構建後事件會將配置文件中的佔位符替換爲存儲在模板文件中的值。這會爲每個環境生成正確的配置文件。

該想法取自Managing Multiple Configuration File Environments with Pre-Build Events,但隨模板替換而擴展。

2

如果我理解正確的話,你要分解出一些「穩定」的設置

  1. 的配置系統,我無法改變部署團隊是分層次的,你可以在
    C:\Windows\Micorsoft.NET\<version>\Machine.configWeb.config存儲默認設置
    這是一個相當沉重的工具,不過,讓一個錯誤,並且大多數.NET應用程序將無法啓動

  2. 使用ConfiguratonManager class可以從共享路徑獲取設置。這可能需要更改(全部)讀取設置的代碼。

1

你可以包含外部xml文件到你的web.config。

See this question

<!-- SomeProgram.exe.config --> 
<configuration> 
    <connectionStrings configSource="externalConfig/connectionStrings.config"/> 
</configuration> 

<!-- externalConfig/connectionStrings.config --> 
<connectionStrings> 
    <add name="conn" connectionString="blahblah" /> 
</connectionStrings> 
+1

亞歷山大,謝謝你的回答,但它不能滿足我所有的需求。 ConfigSource必須引用同一目錄中的文件或配置文件的子目錄中的文件。所以,用你的方法,我需要創建新的配置,而不是減少它們的數量。 – GRGodoi 2009-11-07 15:08:01

2

可以使用configSource屬性在connectionStrings部分包括外部連接字符串文件:

應用的web.config

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

connectionStrings.config

<connectionStrings> 
    <add name="connection1" connectionString="..." /> 
</connectionStrings> 

注意:如marc_s暗示的意見,configSource屬性可以在任何配置部分使用。

+0

這實際上適用於任何**配置部分 - 不只是connectionStrings。 – 2009-11-07 12:37:37

+0

是的,當然,編輯包括,謝謝。 – 2009-11-07 13:03:32

相關問題