我们在运行时配置应用程序的各个部分:
ConfigurationManager.AppSettings["someKey"] = "someValue";
这个代码是在一个http模块的init上调用的,所以它很早就可以正常运行了。 原因是一个框架,我们(提供框架的人)希望避免框架的用户(我们公司的其他开发人员)
现在,在某些情况下(即高内存压力),ConfigurationManager显然会丢弃appSettings的NameValueCollection
并重新加载文件中的值,这样我们通过代码添加的键/值就会丢失
有时在Web应用程序运行几个小时后会发生这种情况。它非常非常罕见,只有当Web应用程序看起来很重时才会发生。
现在的问题是:
有没有办法
RefreshSection
的调用)或更新:确定值被删除的原因(内存压力)
答案 0 :(得分:0)
由于这些AppSettings适用于自定义组件(您的)并且您显然能够在需要时提供合理的默认值,因此对我来说明智的选择是不要担心它是否被转储和重新加载。而是创建一个配置包装类(您甚至可能已经有一个),使用它来包装对AppSettings的任何调用,如果定义了键然后返回值,否则返回默认值。
无需担心这种预防/检测/反应。
答案 1 :(得分:0)
除非这些手动添加的设置不应该成为配置的一部分,否则为什么不保存它们呢?
ConfigurationManager.AppSettings["someKey"] = "someValue";
ConfigurationManager.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
这种方式即使删除哈希表,也会从配置文件中重新加载值。
答案 2 :(得分:0)
Kevin P. Rice在评论中提出的解决方案非常适合这个问题。 这里回答:Is there a way to override ConfigurationManager.AppSettings?