是否可以通过使用反射来调整readonly属性来使应用程序设置可编辑?

时间:2016-08-01 13:46:27

标签: c# reflection app-config

我发现以下代码将ConfigurationManager.ConnectionStrings属性的readonly属性设置为false:

    typeof(ConfigurationElementCollection)
        .GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
        .SetValue(ConfigurationManager.ConnectionStrings, false);

是否可以应用此功能使AppSettings属性也可编辑?

AppSettings是NameValueCollection,它实现NameObjectCollectionBase,其上有IsReadOnly属性。但是,如果我调用GetFields(),它将返回一个空列表。

编辑:

我要做的是在单元测试中修改我的appsettings,然后执行一个从app设置读取并执行某些功能的方法。

因此,任何允许我更改内存中的appsettings(但不会将它们保存到磁盘)的选项都可以。理想情况下,不回收应用程序池。

适用于连接字符串,但我无法使用相同的技术将应用设置设置为可编辑。

2 个答案:

答案 0 :(得分:1)

如果您只想更新int文件的AppSettings部分中的设置,然后将其保留,则下面的代码可以解决问题。

*.config

答案 1 :(得分:0)

根据reference source,基础字段的名称为_readOnly,因此右侧BindingFlags使这些字段更改其值时应该没有问题。

或者,您可以通过调用setter方法或使用IsReadOnly快捷方式获取SetValue属性并更改其值。