我发现以下代码将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(但不会将它们保存到磁盘)的选项都可以。理想情况下,不回收应用程序池。
适用于连接字符串,但我无法使用相同的技术将应用设置设置为可编辑。
答案 0 :(得分:1)
如果您只想更新int
文件的AppSettings
部分中的设置,然后将其保留,则下面的代码可以解决问题。
*.config
答案 1 :(得分:0)
根据reference source,基础字段的名称为_readOnly
,因此右侧BindingFlags
使这些字段更改其值时应该没有问题。
或者,您可以通过调用setter方法或使用IsReadOnly
快捷方式获取SetValue
属性并更改其值。