【问题标题】:Environment-specific customSection properties in Web.configWeb.config 中特定于环境的 customSection 属性
【发布时间】:2011-12-16 19:03:19
【问题描述】:

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

我有 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 中添加了一个 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 中的配置被忽略了。

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

【问题讨论】:

  • AFAIK 只有在使用 Visual Studio 发布应用程序时才能识别平台特定配置。根据您的问题,我无法推断您是从 VS 启动项目还是在使用之前将其实际发布到 IIS?
  • 我通过 Visual Studio 启动它。实际上,您的评论使我走上了解决问题的道路-我从根本上误解了 Web.config 转换的工作原理。如果您将评论转换为答案,我会接受。谢谢!

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多