Как прочитать эту пользовательскую конфигурацию из App.config? - PullRequest
10 голосов
/ 02 июня 2011

Как прочитать эту пользовательскую конфигурацию из App.config?

<root name="myRoot" type="rootType">
    <element name="myName" type="myType" />
    <element name="hisName" type="hisType" />
    <element name="yourName" type="yourType" />
  </root>

Вместо этого:

<root name="myRoot" type="rootType">
  <elements>
    <element name="myName" type="myType" />
    <element name="hisName" type="hisType" />
    <element name="yourName" type="yourType" />
  </elements>
  </root>

Ответы [ 4 ]

31 голосов
/ 11 июня 2011

Чтобы элементы вашей коллекции могли находиться непосредственно в родительском элементе (а не в дочернем элементе коллекции), вам необходимо переопределить ваш ConfigurationProperty.Например, допустим, у меня есть элемент коллекции, такой как:

public class TestConfigurationElement : ConfigurationElement
{
    [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
    public string Name
    {
        get { return (string)this["name"]; }
    }
}

И коллекция, такая как:

[ConfigurationCollection(typeof(TestConfigurationElement), AddItemName = "test")]
public class TestConfigurationElementCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new TestConfigurationElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((TestConfigurationElement)element).Name;
    }
}

Мне нужно определить родительский раздел / элемент как:

public class TestConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("", IsDefaultCollection = true)]
    public TestConfigurationElementCollection Tests
    {
        get { return (TestConfigurationElementCollection)this[""]; }
    }
}

Обратите внимание на атрибут [ConfigurationProperty("", IsDefaultCollection = true)].Дав ему пустое имя, и установив его как коллекцию по умолчанию, я могу определить мою конфигурацию следующим образом:

<testConfig>
  <test name="One" />
  <test name="Two" />
</testConfig>

Вместо:

<testConfig>
  <tests>
    <test name="One" />
    <test name="Two" />
  </tests>
</testConfig>
7 голосов
/ 02 июня 2011

Вы можете использовать метод System.Configuration.GetSection () для чтения пользовательских разделов конфигурации.

См. http://msdn.microsoft.com/en-us/library/system.configuration.configuration.getsection.aspx, чтобы узнать больше о GetSection ()

4 голосов
/ 11 июня 2011

Поскольку это не стандартный формат файла конфигурации, вам придется открыть файл конфигурации в виде документа XML, а затем извлечь разделы (например, с помощью XPath). Откройте документ с этим:

// Load the app.config file
XmlDocument xml = new XmlDocument();
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
0 голосов
/ 15 июня 2011

Я думаю, вы можете использовать

            XmlDocument appSettingsDoc = new XmlDocument();
            appSettingsDoc.Load(Assembly.GetExecutingAssembly().Location + ".config");
            XmlNode node = appSettingsDoc.SelectSingleNode("//appSettings");

            XmlElement element= (XmlElement)node.SelectSingleNode(string.Format("//add[@name='{0}']", "myname"));
            string typeValue = element.GetAttribute("type");

Надеюсь, это решит вашу проблему.Удачного кодирования.:)

...