2017-10-30 8 views
-1

私はC#でプログラムを開発しており、初めてカスタム構成を使用します。C#カスタム構成が読み取られない

私のプログラムは正しく起動していますが、設定ファイルが読み込まれていないようです。

これが私の "app.configを" 設定ファイル

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="Files" type="Initialisation.FilesSection, Initialisation" > 
     <section name="Source" type="Initialisation.SourceElement, Initialisation" /> 

     <section name="List" type="Initialisation.ListElementCollection, Initialisation" /> 
     <section name="File" type="Initialisation.FileElement, Initialisation" /> 
    </sectionGroup> 
    </configSections> 

    <Files> 
    <Source path="\\192.168.21.6\tmp\" /> 

    <List> 
     <File name="Adobe Reader"  file="readerdc_fr_xa_crd_install.exe"   default="true" /> 
     <File name="Adobe Flash"  file="flashplayer27pp_xa_install.exe"   default="false" /> 
     <File name="Java"    file="java.exe"         default="true" /> 
    </List> 
    </Files> 
</configuration> 

であり、これは私はこのような値を取得しようとしていたファイル

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Initialisation 
{ 
    public class Files 
    { 
     //private static FilesSection _config; 

     private Files() 
     { 
     } 

     public static FilesSection Config 
     { 
      get 
      { 
       /*if (_config == null) 
       { 
        _config = global::System.Configuration.ConfigurationManager.GetSection("Files") as FilesSection; 
       } 
       return _config;*/ 
       return ((FilesSection)(ConfigurationManager.GetSection("Files"))); 
      } 
     } 
    } 

    public class FilesSection : System.Configuration.ConfigurationSection 
    { 

     [System.Configuration.ConfigurationPropertyAttribute("Source")] 
     public SourceElement Source 
     { 
      get 
      { 
       return ((SourceElement)(this["Source"])); 
      } 
     } 

     [System.Configuration.ConfigurationPropertyAttribute("List")] 
     [System.Configuration.ConfigurationCollectionAttribute(typeof(FileElement), AddItemName = "File")] 
     public ListElementCollection List 
     { 
      get 
      { 
       return ((ListElementCollection)(this["List"])); 
      } 
     } 
    } 

    public class SourceElement : System.Configuration.ConfigurationElement 
    { 

     [System.Configuration.ConfigurationPropertyAttribute("path", IsRequired = true)] 
     public string Path 
     { 
      get 
      { 
       return ((string)(this["path"])); 
      } 
      set 
      { 
       this["path"] = value; 
      } 
     } 
    } 

    public class ListElementCollection : System.Configuration.ConfigurationElementCollection 
    { 

     public FileElement this[int i] 
     { 
      get 
      { 
       return ((FileElement)(this.BaseGet(i))); 
      } 
     } 

     protected override System.Configuration.ConfigurationElement CreateNewElement() 
     { 
      return new FileElement(); 
     } 

     protected override object GetElementKey(System.Configuration.ConfigurationElement element) 
     { 
      return ((FileElement)(element)).Name; 
     } 
    } 

    public class FileElement : System.Configuration.ConfigurationElement 
    { 

     [System.Configuration.ConfigurationPropertyAttribute("name", IsRequired = true)] 
     public string Name 
     { 
      get 
      { 
       return ((string)(this["name"])); 
      } 
      set 
      { 
       this["name"] = value; 
      } 
     } 

     [System.Configuration.ConfigurationPropertyAttribute("file", IsRequired = true)] 
     public string File 
     { 
      get 
      { 
       return ((string)(this["file"])); 
      } 
      set 
      { 
       this["file"] = value; 
      } 
     } 

     [System.Configuration.ConfigurationPropertyAttribute("default", IsRequired = false, DefaultValue = false)] 
     public bool Default 
     { 
      get 
      { 
       return ((bool)(this["default"])); 
      } 
      set 
      { 
       this["default"] = value; 
      } 
     } 
    } 
} 

を管理するクラスです:

FilesSection fs = Files.Config; 
SourceElement se = fs.Source; 
string path = se.Path; 

MessageBox.Show(path); 

しかし、すべての変数(fs、seおよびpath)はnullです。

私は多くの記事を読んで、私はすでに多くの解決策を試してみました:/

答えて

0

問題がファイルクラスはのConfigurationSectionですが、sectionGroupとしてあなたのapp.configでそれを宣言しているということです。他の要素は、ConfigurationElementと同じですが、セクション要素として宣言されています。

をすべて削除ConfigurationElements彼らは宣言を必要とし、セクションsectionGroupからのファイルの宣言を変更しないようconfigSectionsから、。

あなたconfigSectionsは次のようになります。

<configSections> 
    <section name="Files" type="Initialisation.FilesSection, Initialisation" /> 
</configSections> 
+0

は、それが動作するようになりました、あなたの助けをありがとう! –

関連する問題