[C#]使用Configuration來切換程式碼配置

  • 10516
  • 0
  • C#
  • 2017-08-07

[C#]使用Configuration來切換程式碼配置

前言

visual studio有一種很方便的佈署方式,就是單鍵佈署的方式,很快就能切換到不同環境並直接佈署,然後再搭配configuation切換的話,我們可以很容易取代掉任何web.config想取代的東西,但是以筆者工作過的一些專案,卻發覺事實上很多案子並不允許這樣子做,有些可能是安全性的問題,有些是老專案已有一套配置方式,有很多種種原因導致方便的單鍵佈署不能使用,但是我們確實想要在開發階段和上線階段,不是用人工檢查和註解的方式來佈署,接下來想介紹一樣是用切換環境的方式,但是是從程式碼切換。

動手實做

現在假設我們有一個情境,也就是我們有兩個環境,然後定義了兩個connection string來使用,當我們在debug的階段和release的階段,要讀取不同的connection string。

    public class ValuesController : ApiController
    {
        
        public IEnumerable<string> Get()
        {
            string connectionString = GetConnectionString();

            return new string[] { "value1", "value2" };
        }

        private string GetConnectionString()
        {
#if DEBUG
            return WebConfigurationManager.ConnectionStrings["DevConnection"].ToString();
#else
            return WebConfigurationManager.ConnectionStrings["ProdConnection"].ToString();
#endif
        }
    }

效果如下

但是在複雜一點的環境,通常不會只有開發環境和正式環境,可能還會有qat環境等等,所以接著我們就來新增新的configuration吧

按下ok之後,就可以看到我們有新的配置,接著我再來新增一個Qat的配置吧。

        private string GetConnectionString()
        {
#if DEBUG
            return WebConfigurationManager.ConnectionStrings["DevConnection"].ToString();
#elif QAT
            return WebConfigurationManager.ConnectionStrings["QatConnection"].ToString();
#else
            return WebConfigurationManager.ConnectionStrings["ProdConnection"].ToString();
#endif
        }
    }

圖下示例

但是當我們在切換的時候,切換到Qat卻直接轉到else的部份,並沒有進到qat的環境配置啊,其實還有一些設定得完成,這樣子這些配置才會真的生效,圖示如下

完成之後可以看到切換環境就都正常了