2009-01-22 23 views
1

對於一個客戶端,我必須提供他們在QA和生產中使用的版本。構建文件的校驗和必須匹配 - 它在QA和生產之間根本無法改變。每個環境的配置都不同,所以我有一個只包含代碼的版本,然後爲每個僅包含環境特定配置文件的環境構建一個單獨的版本。配置文件構建將文件放在同一位置而不考慮環境,因此代碼始終可以加載c:\ myapp \ myconfig.xml,其中將包含該環境的設置。我閱讀的大多數文章(例如Scott Hanselman's)都涉及到每個環境的不同構建,但這不起作用,因爲校驗和值會有所不同。我應該以其他方式部署這些配置文件嗎,還是我有一個可行的解決方案?我目前的解決方案的一個問題是它需要多個幾乎相同但不完全相同的配置文件。因此必須將一個更改添加到多個文件中,這是我想避免的,但我不知道如何執行此操作,除非在構建時或使用複製適當文件的外部腳本。對每個環境的配置文件使用單獨的MSI版本

回答

0

假設:

1)XML配置文件

2)變化的總數之間很少(即使複製了許多配置文件)建立

我將不得不安裝手柄更新配置文件在安裝時

比如我們使用的WiX V3爲我們的安裝和更新多個配置文件與值在安裝過程中使用XMLFILE元素

< util:XmlFile Action =「setValue」File =「[DIRECTORIES.WEBSERVICES] web.config」ElementPath =「// configuration/system.web/compilation」Name =「debug」Value =「false」Permanent =「yes 「/ >

1

不知道您的設置是否更復雜,但我們有類似的問題,我們添加了一個自定義操作類,根據環境更新配置文件(用戶在安裝期間選擇),然後添加這個自定義動作項目到您的設置項目。這樣你就可以使用一個安裝exe,而不管你安裝的是什麼環境。

讓我知道你是否有興趣,我可以張貼一些樣本或更多的信息關於我們如何完成它。

這裏有一些更多的細節:

  1. 添加一個新的對話框,您的安裝項目,以向用戶請求的環境(我們使用一個4單選按鈕,對話框,我們有4個環境:開發,質量保證,分期和生產)
  2. 配置4個單選按鈕的值和該值將被設置,即「環境」(於後者由CustomActions類使用)
  3. 一個DLL項目添加到您的解決方案與財產單班(CustomActions)
  4. 在CustomAction類的,你看我們在第二步配置屬性:

    if(!this.Context.Parameters.ContainsKey("environment")) 
        { 
         string error = "'environment' argument is null. Please configure config file manually"; 
         //...handle your error, etc. 
         return; 
        } 
    
        string env = this.Context.Parameters["environment"]; 
    
  5. 現在你的環境變量中包含我們分配給每個單選按鈕步驟值。然後您可以使用switch語句來決定用戶選擇的環境。並正確地更新您的配置文件:

Configuration config = ConfigurationManager.OpenExeConfiguration(this.servicePath); //例如,要更改您要使用的連接字符串: config.ConnectionStrings.ConnectionStrings [「oracle」] =「dev conn string here」;

  • 回到你的安裝項目,CustomActions項目的輸出添加到您的CustomActions編輯器(查看菜單 - >編輯 - >自定義操作)

  • 最後,配置您的安裝項目的CustomActionData屬性將環境和其他變量傳遞給CustomAction類(我的看起來像這樣: /serviceFolder =「[TARGETDIR] \」/serviceExe="blahblah.exe「/ serviceName =」MyServiceName「/ environment =「[ENVIRONMENT]」

  • 希望有道理,適用於您的解決方案!

    +0

    這聽起來很有趣 - 你會發布更多信息嗎?你如何在安裝項目中使用這個類? – 2009-01-29 17:36:20

    相關問題