2011-12-16 17 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任务,所以人们可以在编译过程中添加执行它。