【问题标题】:common web.config connectionstrings for different web applications?用于不同 Web 应用程序的通用 web.config 连接字符串?
【发布时间】:2014-09-22 16:05:02
【问题描述】:

我们有多个 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  <-|     

【问题讨论】:

  • 使用一个配置文件并添加多个连接节点有什么问题..?这是完全可能的..我们每天都这样做..我个人认为维护 3 个单独的 .config 文件比较困难,但我想一切皆有可能
  • 你可以把连接字符串放在 machine.config 中
  • 为每个应用程序设置名称。
  • 他们是在一个解决方案下还是多个解决方案下?
  • 多种解决方案,有没有办法从web.config文件中读取xml?

标签: c# asp.net web.config-transform


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以覆盖 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"];
    

    马丁干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多