2011-12-16 16 views
1

我正在嘗試在我正在構建的一個asp.net MVC3 Web應用程序中執行一些特定於環境的配置。我對平臺有點新,並且遇到了一些與環境相關的配置問題。Web.config中特定於環境的customSection屬性

我有3個配置文件:

  • 的Web.config
  • Web.Debug.config
  • Web.Release.config

我已經放在我的connectionString配置調試/發佈文件,它的工作原理,所以我知道asp.net至少識別我的調試/發佈設置的一些概念。

我還添加了一些自定義配置節在Web.config中是這樣的:

<configSections> 
    <section name="GitHubConfig" type="SmartGigs.Controllers.GitHubConfig" /> 
    <section name="JanRainConfig" type="SmartGigs.Services.JanRainConfig" /> 
    </configSections> 

然後我實際上是在Web.config中是這樣定義它們:

<GitHubConfig ClientId="c" Secret="s" /> 

,並嘗試加載他們是這樣的:

var jrConfig = (JanRainConfig)WebConfigurationManager.GetSection("JanRainConfig"); 
var gitHubConfig = (GitHubConfig) WebConfigurationManager.GetSection("GitHubConfig"); 

最後,我添加一個調試特定的屬性到Web.Debug.config:

<JanRainConfig Key="key" TokenUrl="http://localhost:55739/Account/LogOn" /> 

問題

如果我得到我在Web.config中定義的屬性,它完美。如果我嘗試僅在Web.config中定義一個屬性或在Web.Debug.config中定義它並覆蓋它(並添加xdt:Transform =「Replace」),則屬性設置爲空(在前一種情況下)或包含Web.config中的設置(在後者中) - 就好像我在Web.Debug.config中的配置被忽略。

什麼是正確的方式來完成我想要做的?

+0

AFAIK只有在使用Visual Studio發佈應用程序時纔會識別平臺特定的配置。從你的問題我不能推斷你是否從VS啓動項目,或實際上發佈到IIS之前使用它? – 2011-12-18 19:13:28

回答

2

僅在發佈項目時應用Web.config轉換。你肯定不是第一個,弄錯了(包括我在內)。我建議在默認web.config中使用調試配置,並在.release.config文件中僅應用自定義邏輯。

當直接啓動項目時,轉換的web.config沒有被VS拾取,但AFAIR轉換過程是一個自定義的MSBuild任務,所以人們可以在編譯過程中添加執行它。