簡體   English   中英

覆蓋app.config(或web.config)中的ConnectionStrings

[英]Override ConnectionStrings in app.config (or web.config)

有沒有辦法覆蓋app.config中的ConnectionString。 我們的構建系統也在客戶的服務器上運行,但是connectionString需要不同。 因為app.config在svn中,每次我在app.config中更改內容並提交它時,我需要轉到客戶的服務器將connectionString更改回他們的數據庫...

例如,在ant-scripts中,這沒有問題,但在app.config中我似乎無法找到方法。 試過這個例子:

<connectionStrings configSource="WebConnectionString.config">
  <add name="ConnectionString"
    connectionString="..." 
    providerName="System.Data.SqlClient"/>
</connectionStrings>

我想要做的是,如果WebConnectionString.config存在,那么使用該配置文件中的connectionString。 如果沒有,請使用代碼示例中定義的那個(因此,在app.config中)。

WEB DELPOYMENT PROJECTS WOOHOO

什么方法可以節省自己的部署悲傷。 您可以做的一件非常美妙的事情就是為每位客戶提供Build配置。

然后,您還可以為每個包含連接字符串的客戶提供配置文件。 根據您選擇的構建配置,不同的連接字符串將粘貼到web.config中。 所以現在你可以為每個客戶建立一個“不同”的網站,這很容易。

想象一下名為config的文件夾和cust1ConnectionString.cfg,cust2等文件

現在您創建配置。 您已熟悉Release和Debug,創建cust1,cust2。

然后在Web部署項目中,有一個選項可以將Web配置的secions替換為另一個文件中的部分。

所以你去cust1部署並告訴它連接字符串在cust1connectionstrings.cfg文件中。 告訴它cust2在哪里等....

現在不再惹惱,每次為客戶構建網站時,所有設置都插入到web.config中,您只需移交正確配置的網站即可。 SVN中的內容並不重要,因為每個客戶都有自己的配置。

您可以使用configSource屬性執行此操作,但是您必須為每個平台/環境創建一個,因為使用此功能時該元素必須為空

但是,使用configSource屬性時,必須將整個部分移動到單獨的文件,因為沒有合並元素設置。

只有AppSettings部分允許您使用file元素覆蓋這樣的值。

需要考慮的事情:VS2010有一個功能,允許您根據構建目標(實時/發布/調試/測試等)修改配置文件。

您可以執行以下操作,創建一個用於封裝連接字符串檢索的類。

這樣的事情

public static class ConnectionStringBuilder
    {
        const string ConnStringDefault = @"defaultConnString";
        static readonly string _connString = string.Empty;
        public static string Build()
        {
            return _connString;
        }

        /// <summary>
        /// Builds connection string from the config file with the given name
        /// </summary>
        /// <param name="name">The name.</param>
        /// <returns></returns>
        public static string Build(string name)
        {
            if (ConfigurationManager.ConnectionStrings[name] != null)
                return ConfigurationManager.ConnectionStrings[name].ConnectionString;

            throw new ArgumentException("Connectionstring with given name '" + name +"' not found! ", "name");
        }

        /// <summary>
        /// Initializes the <see cref="ConnectionStringBuilder"/> class.
        /// </summary>
        static ConnectionStringBuilder()
        {

            if (ConfigurationManager.ConnectionStrings["default"] != null)
            {
                log.Info("conn string in config found");
                _connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
            }
            else
            {
                log.Info("no default connection string found, using test connection string");
                _connString = ConnStringDefault;
            }
        }
    }

用法就是這樣的

using(var conn = new SqlConnection(ConnectionStringBuilder.Build())
   {
      // do some stuff...
   }

希望有所幫助

當我們進行構建時,我們將SVN配置替換為生產配置,我們也已經開始使連接字符串完全基於所有應用程序的Web服務,而不管狀態指向connection string Web服務,該服務將正確的服務器拉下來。

一種方法是使用Web部署項目在構建時替換web.config中的connectionStrings部分。 您可以使用一個使用connstrs的調試模式,以及一個保持不變的發布模式。 一切都可以完全登記到svn。 您還可以使用WDP應用其他自定義的構建后步驟,這非常方便。

另一個選擇是將它們完全移動到appSettings中 - 但該文件只包含名稱/值對,因此需要更改代碼。

我會將連接字符串移動到machine.config。 這樣您就不必擔心更改任何內容,因為它們都是在服務器上存儲/管理的。 您現在可以無憂無慮地推送新版本,確保所有連接字符串保持與最初設置的相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM