爲了處理不同部署目標的設置,我將應用程序設置從app.config移到了它自己的文件中,並通過configSource將該文件包含在app.config中。我還創建用於每個target.Here一個設置文件是一個例證:多個.NET配置文件和安裝項目問題
Project A
app.config (references settings.config)
settings.config
settings.Release.config
settings.Debug.config
在生成後,我複製適當的設置{配置}的.config到輸出目錄。目前爲止工作正常,我可以在項目輸出目錄中看到settings.config文件,其中包含當前版本配置的設置:發佈,調試等。
但是,我遇到了安裝項目的問題,有這個項目(項目A)。最初,它不包括settings.config文件。因此,我將settings.config文件的構建操作設置爲內容,並將項目A的內容文件添加到安裝項目中。這確保了setup.config文件包含在設置中。但是,由於安裝項目似乎是從項目目錄而不是輸出目錄中選取settings.config文件,因此設置中包含的settings.config文件不是它應該包含的內容。我希望輸出目錄中的那個包含在安裝程序中,因爲那一個對於當前的構建配置是正確的。我嘗試了以下方法:
- 將settings.config添加爲安裝項目的文件。但是,似乎我只能指定絕對路徑。因此,當我從特定構建配置(..bin \ debug \ settings.config)的輸出目錄中添加它時,它在其他構建配置中不起作用,因爲(..bin \ debug \ settings.config)確實存在於指定的目錄。我研究了在安裝項目中使用相對路徑或動態路徑,其中構建配置可以被指定爲路徑的一部分,但我找不到任何東西。
我認爲使用預生成事件實際修改在項目目錄的settings.config文件,然後把它複製了輸出目錄通過其「複製到輸出目錄」設置爲始終複製或是否有更新的複製。這應該確保將相應的settings.config複製到輸出目錄,就像基於後構建的解決方案一樣,並且還應該確保settings.config文件的內容在安裝項目包含之前已更新。但是,我不喜歡這個解決方案,因爲我必須確保settings.config文件是可寫的,然後才能進行任何更改,因爲它是源代碼管理的。如果它是隻讀的,那麼我需要將其翻轉爲可寫,進行更改,然後將其設置爲只讀。這增加了額外的複雜性。
我想知道是否有人有一個更好的主意或知道一個安裝項目的技巧,允許我包括settings.config文件適合當前生成配置在安裝程序。
感謝
我不知道這可能對你有多大幫助,但是你可以試試MSBuild腳本,在編譯projet之前實現你的配置文件「開關」。 2年前,我看到了類似這樣的東西,但是它嵌入了Pearl的幾條線中,以達到目前爲止我所見過的最複雜的構建腳本之一。但是你應該能夠爲你的項目做更簡單的事情。 – 2009-05-27 17:03:25