【发布时间】:2018-02-22 01:04:34
【问题描述】:
我正在尝试通过ConfigurationManager.ConnectionStrings 静态属性从在运行时提供的任意配置文件中访问一组连接字符串。应用程序代码期望连接字符串在这个集合中,我需要提供一个新值而不编辑默认配置文件。
我已经确定我可以使用System.Configuration.ConfigurationManager.OpenMappedExeConfiguration 通过System.Configuration.ExeConfigurationFileMap 从任意配置文件中加载连接字符串,例如:
using System.Configuration;
var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap{ExeConfigFilename = 'some.config'}, ConfigurationUserLevel.None);
config.RefreshSection(config.ConnectionStrings.SectionInformation.SectionName);
在这种情况下,我希望能够从静态ConfigurationManager.ConnectionStrings 属性访问从some.config 加载的连接字符串,但这似乎只包含应用程序配置默认值中可用的内容。
是否可以屏蔽或复制到默认配置中以更新静态ConfigurationManager.ConnectionStrings 属性的值?或者,有什么方法可以将默认配置重新定义为一个新的配置文件在运行时定义,希望能得到想要的最终结果?
【问题讨论】:
-
紧接着 -
ConfigurationManager.OpenMappedExeConfiguration- 检查config的HasFile属性。有时它会做诸如 not 之类的坏事,即使它没有加载文件也会抛出异常。它会给你一个Configuration对象,其中不包含你文件中的内容。 -
是的,
HasFile属性是true和FilePath是我的连接字符串的非默认配置文件。 -
你不能改变应用程序的设计,为你的连接使用专门的服务,连接管理器或配置服务之类的。
-
当然可以,但我知道我可以做到。我问这个问题是为了看看是否有任何我不熟悉的配置技巧可以在这种情况下工作。
标签: c# .net connection-string configurationmanager