2010-07-29 3 views
4

Я взял код из этого примера.System.Configuration with Separate .config file

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> 

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

выше не работает (конечно).

Ниже приведено мое копирование/вставка статьи ms, о которой я упоминал выше. И он полностью функционировал, когда я вставлял его здесь.

//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 = "[email protected]#$%^&*()[]{}/;'\"|\\", 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 = "[email protected]#$%^&*()[]{}/;'\"|\\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 = "[email protected]#$%^&*()[]{}/;'\"|\\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> 
+0

Чтобы включить код и/или XML на этом сайте, выберите его в редакторе и нажмите Control-K. –

+0

BTW, внесли ли вы какие-либо изменения в код, который вы вставляли? –

+0

Без изменений. Единственное, что я сделал, это поместить пробел после <в xml и пробел перед> в xml. Но код C# как копировать и вставлять, и я использовал теггер «code» в элементе управления текстовым блоком. – granadaCoder

ответ

5
+0

Существует немного известный атрибут, который был введен в .Net framework 2.0 под названием configSource, который позволяет экрнализировать разделы конфигурационного файла. , но могут быть добавлены в любой раздел конфигурации, чтобы указать внешний файл для этого раздела: выше - цитата из первого URL. (В случае, если он перестанет существовать в будущем). // малоизвестный атрибут // Конец цитаты Теперь я не чувствую себя так плохо. БЛАГОДАРЯ! – granadaCoder

9

Это будет работать, если вы измените свое 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 элемент в этом файле!)

Я не был в состоянии двигаться configSections в отдельные файлы. Не уверен, что вы можете сделать это с помощью configGroups, если вы не сделаете намного больше программирования. Каркасная модель конфигурации позволяет легко перемещать configSections.

Надеюсь, это поможет!

+0

// Цитата // Не уверен, что вы можете сделать это с помощью configGroups, если вы не сделаете намного больше программирования .//End Quote Я просто остался «правдой» к исходному примеру msdn на этом. (я думаю), дополнительная команда configGroups - это больше проблем, чем того стоит. Спасибо. ... – granadaCoder

+0

Спасибо, человек, это было полезно. – Anvar

+0

@ Анвар - не проблема ... рад, что я мог бы помочь! –