【发布时间】:2015-12-05 08:43:55
【问题描述】:
我有一个 C#/ASP.NET 项目,它在 web.config 的 system.webServer 部分中使用了一些 handlers 和 modules 用于生产服务器上必须使用的单点登录内容,但是不需要(也不希望)在 localhost 上使用(我只是在 localhost 上看到空白屏幕而不是我的项目)。
简单的解决方案是拥有两个web.config 文件,但大多数设置是相同的,并且必须在两个web.config 文件中更新更改,所以我宁愿只有一个。一种解决方法是在 localhost 上开发时注释 web.config 中的相应行,并在部署时取消注释它们 - 但这并不是一个很好的解决方案。
与本地主机上不同的数据库存在类似问题。
有没有一种简单的方法可以让web.config 在web.config 文件中执行类似if (!isLocalhost) use handler/module 的操作?我希望在preCondition 或modules 和filter 设置的类似参数中找到一些东西,但没有找到合适的东西。
另一个想法可能是在app.settings 部分中添加一些内容-您可以有类似<add key="myTrigger" value="true" /> 的行,并通过测试System.Web.Configuration.WebConfigurationManager.AppSettings["myTrigger"] == "true" 在控制器中根据myTrigger 的设置执行操作-这可能是适合使控制器依赖于它是在服务器上还是在本地主机上运行,但是对于像 connectionStrings 这样的设置,这不会有太大帮助 - 除非有办法设置像 <whateversetting ... when appsetting.myTrigger == "true"> 这样的设置(但我怀疑这样的事情存在)。
另一个想法可能是使用外部配置文件,例如,<connectionStrings configSource="some.config" />,它只包含 web.config 的不同部分 - 所以一个本地 some.config 和一个在服务器上。
我希望有一个 all-in-one-web.config,但这似乎是不可能的 - 除非你有一个好主意。
那么:针对这种情况的最佳做法是什么?
【问题讨论】:
标签: c# asp.net web-config