Есть ли способ получить экземпляр System.Configuration.Configuration на основе произвольного xml?

Я пытаюсь выполнить модульное тестирование написанного мной настраиваемого ConfigurationSection, и я хотел бы загрузить произвольный XML-файл конфигурации в System.Configuration.Configuration для каждого теста (вместо того, чтобы помещать XML-файл конфигурации теста в файл Tests.dll.config. То есть я бы хотел сделай что-нибудь вроде этого:

Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);

Однако похоже, что ConfigurationManager предоставит вам только конфигурацию экземпляры, связанные с EXE-файлом или конфигурацией компьютера. Есть ли способ загрузить произвольный XML в экземпляр конфигурации?


person Matt    schedule 21.08.2008    source источник


Ответы (3)


На самом деле есть способ, который я обнаружил ...

Вам необходимо определить новый класс, унаследованный от вашего исходного раздела конфигурации, следующим образом:

public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}


Затем вы можете создать экземпляр объекта ConfigurationSection следующим образом:

string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);

Надеюсь, это кому-то поможет :-)

person Oliver Pearmain    schedule 01.04.2009
comment
реквизит для фактического ответа на его вопрос. - person Jonathan C Dickinson; 01.04.2009
comment
Хотя пользовательское чтение XML является хорошим решением, фрагмент XML неверен. DeserializeSection ожидает, что xml будет просто частью раздела, например ‹MySection› ‹MyConfig› ‹добавить ключ = ключ значение = значение /› ‹/MyConfig› ‹/MySection› - person batta; 03.08.2020

Я думаю, что вам нужен ConfigurationManager. OpenMappedExeConfiguration

Он позволяет вам открыть файл конфигурации, указанный вами с путем к файлу (заключенный в ExeConfigurationFileMap)

Если то, что сказал другой плакат, верно, и вы не хотите создавать полностью новый XML-файл для тестирования, я бы рекомендовал вам внести изменения в конфигурацию в самом методе тестирования, а затем запустить тесты для недавно измененной конфигурации. данные.

person Nicholas    schedule 24.08.2008

Глядя на членов класса, я бы сказал, что ответ, вероятно, отрицательный *. Я не уверен, почему вы все равно захотите это сделать, а не создавать свой собственный файл конфигурации XML.

* Это нет, за исключением грязных хаков с отражением

person TheSmurf    schedule 21.08.2008