Web.config中特定于环境的customSection属性

时间:2011-12-16 19:03:20

标签: c# .net asp.net-mvc-3

我正在尝试在我正在构建的asp.net MVC3 Web应用程序中执行一系列特定于环境的配置。我对这个平台有些新手,并且遇到了一些环境特定配置的问题。

我有3个配置文件:

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

我已将我的connectionString配置放在Debug / Release文件中并且它可以工作,所以我知道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中添加了一个特定于Debug的属性:

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

问题

如果我获得了我在Web.config中定义的属性,它可以很好地工作。如果我尝试仅在Web.config中定义属性或在Web.Debug.config中定义它并覆盖它(并添加xdt:Transform =“Replace”),则属性设置为空白(在前一种情况下)或包含Web.config中的设置(在后者中) - 好像我的Web.Debug.config中的配置被忽略了。

完成我想要做的事情的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

仅在发布项目时应用Web.config转换。你肯定不是第一个,这是错误的(包括我)。我建议在默认的web.config中使用debug-configuration,并在.release.config文件中仅应用自定义逻辑。

有点可悲的是,VS在直接启动项目时没有获取转换的web.config,但AFAIR转换过程是一个自定义的MSBuild任务,因此可以在编译期间添加执行它。