【发布时间】: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