IIS多個網站共用同一份程式

  目前在運行的網站,因業務需求,獨出另一個網站及資料庫。在布署網站時會分別發佈到2個不同的資料夾。兩個資料夾的程式一模一樣,只差在web.config的ConnectionString不同。目前只有2個網站,布署工作還算簡單,未來若繼續擴增時,除了發行工作會越來越多,同步及除錯上的問題也是另一要考量的地方。

解決方式
將多個網站指向同一位置,此作法為同一程式目錄,但不使用目錄內web.config的ConnectionString,而是使用在IIS上所設定的。作法如下:

1.Web.Release.config 使用transform移除連線字串
這是給發行時將原本的連線字串移除,並使用在IIS所設定的連線字串

  <connectionStrings>
    <add name="MyConn" xdt:Transform="Remove" xdt:Locator="Match(name)" connectionString="" />
  </connectionStrings>

2.在IIS新增Root層級的連線字串

正式網站



預備網站

設定完後,預設會存在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config









若不想用上述GUI的設定方式,可以透過PowerShell新增
 Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT' -location ConnIIsLab-PRD' -filter "connectionStrings" -name "." -value @{connectionString='Data Source=.;Initial Catalog=PRD;User ID=sa;Password=xxx';name='MyConn'}
 Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT' -location 'ConnIIsLab-STA' -filter "connectionStrings" -name "." -value @{connectionString='Data Source=.;Initial Catalog=STA;User ID=sa;Password=xxx';name='MyConn'}


測試程式
顯示目前網站的連線字串

ConnIIsLab-PRD

ConnIIsLab-STA


後記-20170815
當多個Site指向同一目錄,在IIS回收重啟時有時會發生dll搶資源的錯誤,造成dll無法正常載入,所以只好再分開為各別目錄。

這個網誌中的熱門文章

[TFS] 分支與合併

[.NET Core] 將專案發行至IIS