0

我们有多个 Web 应用程序,并将所有 Web 应用程序部署在同一个名为 iapps 的文件夹中。但是每个应用程序都有自己的 web.config 文件,并且大多数必须有通用的连接字符串。

现在我想制作一个通用配置文件,所有应用程序都可以读取连接字符串并使用它。我们怎么能做到这一点?任何好的文章或例子

当前的

\iapps\app1
         |- web.config

\iapps\app2
         |- web.config

\iapps\app3
         |- web.config

期待

\iapps\app1    --Web.cofig
    |-root Config <-|
\iapps\app2    --Web.cofig
    |-root Config  <-|   
\iapps\app3    --Web.cofig
    |-root Config  <-|     
4

2 回答 2

0

您可以覆盖 AppDomain 对象中的配置。

您的 web.config 可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="WebApp1" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="WebApp2" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<WebApp1>
   <add key="Key1" value="App1 value"/>
</WebApp1>
<WebApp2>
   <add key="Key1" value="App2 value"/>
</WebApp2>
</configuration>

在您的 PageLoad 事件中,您可以使用它:

SetConfig();
var webApp1Config = ConfigurationManager.GetSection("WebApp1") as NameValueCollection;
var webApp2Config = ConfigurationManager.GetSection("WebApp2") as NameValueCollection;

private static void SetConfig()
{
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\Temp\web.config");
    var fieldInfo = typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static);
    if (fieldInfo != null)
        fieldInfo.SetValue(null, 0);
    var field = typeof(ConfigurationManager).GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static);
    if (field != null)
        field.SetValue(null, null);
    var info = typeof(ConfigurationManager).Assembly.GetTypes().First(x => x.FullName == "System.Configuration.ClientConfigPaths").GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static);
    if (info != null)
        info.SetValue(null, null);
}

现在您可以从配置设置中读取您的设置:

var key1Value = webApp1Config["Key1"];

干杯马丁

于 2014-09-22T17:11:34.983 回答
0

这个答案已经描述了几种选择。此外,您还可以通过将所有常见的连接字符串放在web.config根目录下(即本例中的 iApps)来利用继承的想法。

app1...appN 将全部继承设置iapps\web.config

请注意,您在其中定义的iapps\web.config任何内容都不会在子应用程序的 web.config 中重新定义,否则您将在子应用程序中收到重复的部分定义错误。

于 2014-09-22T16:51:38.190 回答