我正在尝试在我正在构建的asp.net MVC3 Web应用程序中执行一系列特定于环境的配置。我对这个平台有些新手,并且遇到了一些环境特定配置的问题。
我有3个配置文件:
我已将我的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中的配置被忽略了。
完成我想要做的事情的正确方法是什么?
答案 0 :(得分:2)
仅在发布项目时应用Web.config转换。你肯定不是第一个,这是错误的(包括我)。我建议在默认的web.config中使用debug-configuration,并在.release.config文件中仅应用自定义逻辑。
有点可悲的是,VS在直接启动项目时没有获取转换的web.config,但AFAIR转换过程是一个自定义的MSBuild任务,因此可以在编译期间添加执行它。