代码之家  ›  专栏  ›  技术社区  ›  granadaCoder

带有单独的.config文件的System.Configuration

  •  4
  • granadaCoder  · 技术社区  · 14 年前

    http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

    我想知道的是(我今天在网上到处寻找)。。。

    <configuration>
      <configSections>
        <sectionGroup name="pageAppearanceGroup">
          <section
            name="pageAppearance"
            type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly"
            allowLocation="true"
            allowDefinition="Everywhere"
          />
        </sectionGroup>
      </configSections>
    
    
      <pageAppearanceGroup fileName="SomeSeparateFile.config"/>
    
    </configuration>
    

    ..................

    当然,上面的方法是行不通的。

    下面是我对上面提到的微软文章的复制/粘贴。 当我把它贴在这里的时候,它已经完全发挥作用了。

    //START HelperAssembly.csproj
    
    namespace HelperAssembly.Configuration
    {
        using System;
        using System.Collections;
        using System.Text;
        using System.Configuration;
        using System.Xml;
    
        public class PageAppearanceSection : ConfigurationSection
        {
            // Create a "remoteOnly" attribute.
            [ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]
            public Boolean RemoteOnly
            {
                get
                {
                    return (Boolean)this["remoteOnly"];
                }
                set
                {
                    this["remoteOnly"] = value;
                }
            }
    
            // Create a "font" element.
            [ConfigurationProperty("font")]
            public FontElement Font
            {
                get
                {
                    return (FontElement)this["font"];
                }
                set
                { this["font"] = value; }
            }
    
            // Create a "color element."
            [ConfigurationProperty("color")]
            public ColorElement Color
            {
                get
                {
                    return (ColorElement)this["color"];
                }
                set
                { this["color"] = value; }
            }
        }
    
        // Define the "font" element
        // with "name" and "size" attributes.
        public class FontElement : ConfigurationElement
        {
            [ConfigurationProperty("name", DefaultValue = "Arial", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
            public String Name
            {
                get
                {
                    return (String)this["name"];
                }
                set
                {
                    this["name"] = value;
                }
            }
    
            [ConfigurationProperty("size", DefaultValue = "12", IsRequired = false)]
            [IntegerValidator(ExcludeRange = false, MaxValue = 24, MinValue = 6)]
            public int Size
            {
                get
                { return (int)this["size"]; }
                set
                { this["size"] = value; }
            }
        }
    
        // Define the "color" element 
        // with "background" and "foreground" attributes.
        public class ColorElement : ConfigurationElement
        {
            [ConfigurationProperty("background", DefaultValue = "FFFFFF", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\GHIJKLMNOPQRSTUVWXYZ", MinLength = 6, MaxLength = 6)]
            public String Background
            {
                get
                {
                    return (String)this["background"];
                }
                set
                {
                    this["background"] = value;
                }
            }
    
            [ConfigurationProperty("foreground", DefaultValue = "000000", IsRequired = true)]
            [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\GHIJKLMNOPQRSTUVWXYZ", MinLength = 6, MaxLength = 6)]
            public String Foreground
            {
                get
                {
                    return (String)this["foreground"];
                }
                set
                {
                    this["foreground"] = value;
                }
            }
    
        }
    
    }
    
    
    
        namespace HelperAssembly.Configuration
    {
        using System;
        using System.Configuration;
    
        public static class ConfigurationRetriever
        {
            public static PageAppearanceSection RetrievePageAppearanceSection1()
            {
                PageAppearanceSection config = (PageAppearanceSection)System.Configuration.ConfigurationManager.GetSection("pageAppearanceGroup/pageAppearance");
                return config;
            }
    }
    }
    
    
    
    //START ConsoleApplication1.csproj
    
        using System;
    
        using HelperAssembly.Configuration;
    
        namespace ConsoleApplication1
        {
          class Program
          {
            static void Main(string[] args)
            {
    
                try
                {
                    PageAppearanceSection pas = ConfigurationRetriever.RetrievePageAppearanceSection1();
                    if (null != pas)
                    {
                        Console.WriteLine(pas.Color.Foreground);
                        Console.WriteLine(pas.Color.Background);
                    }
                }
    
                catch (Exception ex)
                {
                    Exception innerException = ex;
                    while (null != innerException)
                    {
                        Console.WriteLine(innerException.Message);
                        Console.WriteLine("\n\r");
    
                        Console.WriteLine(innerException.StackTrace);
                        Console.WriteLine("\n\r");
    
                        innerException = innerException.InnerException;
                    }
                }
    
                Console.WriteLine("Press Enter");
                Console.ReadLine();
    
            }
        }
        }
    
    
    
    //XML for config file that works with the above code
    
    
        <?xml version="1.0" encoding="utf-8" ?>
         <configuration>
           <configSections>
             <sectionGroup name="pageAppearanceGroup">
               <section
            name="pageAppearance"
            type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly"
            allowLocation="true"
            allowDefinition="Everywhere"
          />
         </sectionGroup>
        </configSections>
    
        <pageAppearanceGroup>
        <pageAppearance remoteOnly="true">
          <font name="TimesNewRoman" size="18"/>
          <color background="DEFDEF" foreground="ABCABC"/>
          </pageAppearance>
         </pageAppearanceGroup>
    
        </configuration>
    
    2 回复  |  直到 14 年前
        2
  •  9
  •   David Hoerster    14 年前

    如果您将app.config更改为使用以下内容,则此操作将起作用:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="pageAppearanceGroup">
          <section
            name="pageAppearance"
            type="HelperAssembly.Configuration.PageAppearanceSection,HelperAssembly"
            allowLocation="true"
            allowDefinition="Everywhere"
          />
        </sectionGroup>
      </configSections>
    
      <pageAppearanceGroup>
        <pageAppearance configSource="SomeSeparateFile.config"/>
      </pageAppearanceGroup>
    
    </configuration>
    

    以及someSeparateFile.config,如下所示:

    <pageAppearance remoteOnly="true">
      <font name="TimesNewRoman" size="18"/>
      <color background="123456" foreground="ABCDEF"/>
    </pageAppearance>
    

    configuration 元素!)

    我已经能够将配置节移到单独的文件中。除非您进行更多的编程,否则不确定您是否可以使用configGroups实现这一点。配置框架模型让您可以很容易地将configSections移出。