[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的環境配置啊,其實還有一些設定得完成,這樣子這些配置才會真的生效,圖示如下
完成之後可以看到切換環境就都正常了