2008-08-21 65 views
3

在一個.NET項目中,假設你有一個配置設置 - 比如連接字符串 - 存儲在一個app.config文件中,這對你團隊中的每個開發人員都是不同的(他們可能是使用本地SQL Server,特定服務器實例或使用遠程服務器等)。如何管理每個開發人員的配置設置

如何構建您的解決方案,以便每個開發人員都可以擁有自己的開發「首選項」(即未檢入源代碼管理),但提供了一個默認的連接字符串,並將其檢入到源代碼管理中(從而爲源代碼管理提供了正確的默認值構建過程或新開發者)。


編輯:@Jonathon建議的「 file」方法可以以某種方式與 connectionStrings節一起使用嗎?

回答

4

的AppSettings可以用本地文件覆蓋:

<appSettings file="localoveride.config"/> 

這允許每個開發人員,以保持自己的本地設置。

至於連接字符串,在一個完美的世界上所有的開發者應該連接到測試數據庫,而不是運行每個SQL服務器。

但是,我發現最好在源代碼管理中保留一個名爲Web.Config.Prd的文件,並將其用於構建部署。如果有人修改了web.config文件,他們也必須添加換到.PRD文件......有沒有好的自動化有:(

0

我總是爲我的配置文件製作模板。

作爲一個例子,我使用NAnt來構建我的項目。我有一個名爲local.properties.xml.template的文件。如果local.properties.xml不存在,我的NAnt構建將警告開發人員。該文件內將是工作站特定的設置。該模板將被檢入到源代碼控制中,但實際配置將不會。

0

我使用相當古老的設計,只是工作。

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

然後在我的惡性腳本,我有一個任務副本,在當前構建環境加上_應用.config並將其複製到app.config。

它討厭的,但你不能提供商和ConfigurationManager中之間得到欺騙它,說供應商看「開發」或「刺」的連接字符串,只是有3個名爲連接字符串。

惡性任務:

<target name="copyconfigs" depends="clean"> 
    <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}"> 
    <in> 
    <items> 
     <include name="**/${ConfigPrefix}App.config" /> 
     <include name="**/${ConfigPrefix}connectionstrings.config" /> 
     <include name="**/${ConfigPrefix}web.config" /> 
    </items> 
    </in> 
    <do> 
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" /> 
    </do> 
    </foreach></target> 
0

可以在「文件」方法,通過@Jonathon建議用某種方式使用connectionStrings部分?

不,但沒有什麼能阻止您將ConnectionString存儲爲AppSettings鍵。

3

編輯:可以在「文件」的方法提示 通過@Jonathon以某種方式與 connectionStrings節使用?

或者您可以在簽入配置文件中有多個連接字符串,並使用AppSettings鍵來確定要使用哪個ConnectionString。我在我的代碼庫中有以下用途:

public class ConnectionString 
{ 
    public static string Default 
    { 
     get 
     { 
      if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"])) 
       throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings"); 

      return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]); 
     } 
    } 

    public static string GetByName(string dsn) 
    { 
     return ConfigurationManager.ConnectionStrings[dsn].ConnectionString; 
    } 
} 
相關問題