关于c#:是否有一种方法可以获取基于任意xml的System.Configuration.Configuration实例?

关于c#:是否有一种方法可以获取基于任意xml的System.Configuration.Configuration实例?

Is there a way to get a System.Configuration.Configuration instance based on arbitrary xml?

我正在尝试对已编写的自定义ConfigurationSection进行单元测试,并且希望将一些任意配置XML加载到每个测试的System.Configuration.Configuration中(而不是将测试配置xml放入Tests.dll中。 配置文件,就是说,我想做这样的事情:

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

但是,看来ConfigurationManager仅会为您提供与EXE文件或计算机配置关联的Configuration实例。 有没有一种方法可以将任意XML加载到Configuration实例中?


实际上,我已经找到了一种方法。

您需要定义一个从原始配置部分继承的新类,如下所示:

1
2
3
4
5
6
7
8
public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}



然后可以实例化ConfigurationSection对象,如下所示:

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

希望它可以帮助某人:-)


我认为您正在寻找的是ConfigurationManager.OpenMappedExeConfiguration

它允许您打开使用文件路径指定的配置文件(包装在ExeConfigurationFileMap内部)

如果其他提示者说的是正确的,并且您不想创建一个全新的XML文件进行测试,那么我建议您将"配置"编辑内容放入"测试"方法本身,然后针对新更改的配置运行测试数据。


看着班上的成员,我想答案可能不是*。我不确定为什么还是要这样做,而不是创建自己的XML配置文件。

*不是,不包括混乱的反射黑客


推荐阅读