我怀疑这是可能的,但我们的一个 Web 应用程序被客户使用,他们拥有一个实时/测试数据库。目前更新必须转到这两个文件夹,因为两者都有一个目录设置,并且 web.config 文件指向实时或测试。
有什么方法可以让我只使用一个目录,但 IIS 中的 2 个 Web 应用程序每个都使用不同的 web.config 文件或类似的东西,所以只需要更新 1 个地方吗?
你可以,但你必须以稍微不同的方式维护事物。您没有告诉我们的是:您使用配置值分隔的唯一地方是connectionStrings
和appSettings
?还是有其他区别?
然后你真的需要从一个单独的配置文件中加载这些值,而不是由现有的配置文件引用,也不是使用System.Configuration.ConfigurationManager
或其任何命名空间/实用程序加载。下一步是使用传入的 URL 来分离设置类使用的数据,以了解要加载两个数据点中的哪一个。
否则,如果您要以这种方式编写应用程序,这是完全有效的(只是有点违背我们在世界其他地方的习惯)。
根据您的数据库连接系统,您可以为它提供基于用户设置而不是基于 web.config 的连接字符串?必须有某种方法来决定用户想要使用哪个数据库,这可以是简单的按钮或下拉列表来选择,或者让系统保留两个文件夹但使用 URL 路由使它们都指向同一个文件。然后,当您实例化数据库连接时,您可以提供正确的连接字符串并设置好。
编辑:聊天后,解决方案是将两个连接字符串放入web.config
,一个用于测试数据库,一个用于生产。然后添加路由,假装这两个文件夹还在,基本思路如下:
routes.Add(new Route("{folder}/{page}", new PageRouteHandler("~/{page}")));
folder
最后一个函数根据路由值中的值决定使用哪个连接字符串: Request.RequestContext.RouteData.Values["folder"]
,以及使用此动态连接字符串而不是硬编码的全局重构。
对于拥有“多个”web.configs,您可以创建一个特定于文件路径的配置部分,请参阅http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.71%29.aspx但是我不确定这是否适用于连接字符串。
例子:
<configuration>
<location path="Logon.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
</configuration>